PostgreSQL用户、权限管理
1、PG中的用户和角色
PostgreSQL倾向于使用角色来管理数据库权限,为了管理上的方便,一般会将一些列相关的数据库权限赋予给一个角色(Role),哪些用户需要使用这些权限(权限的集合),则将该角色赋予该用户;
在PostgreSQL中,角色和用户是没有分别的,你也可以将一个用户(的所有权限)分发给另外一个用户,这样简化了用户和角色管理;
在数据库初始化的过程中,预定义了一个超级请用户,与初始化数据库的OS User用户名保持一致,若使用用户“postgres”来初始化数据库,那么则会创建一个叫做postgres的超级权限用户;
2、创建角色及用户
语法:
Create Role rname [ [ With ] option [ ... ] ]
Create User rname [ [ With ] option [ ... ] ]
前面说过,在PG中,Role和User是基本没有区别的,但是使用Create User来创建用户的时候,比较Create Role来说,会自带一个"Login"的权限;
语法中的Option内容可以如下:
SUPERUSER | NOSUPERUSER: 创建的用户是否是超级用户,只有超级用户才拥有创建超级用户的权限;
CREATEDB | NOCREATEDB: 是否拥有创建数据库的权限;
CREATEROLE | NOCREATEROLE: 是否拥有创建角色的权限;
CREATEUSER | NOCREATEUSER: 如上;
INHERIT | NOINHERIT: 继承创建用户的权限;
CONNECTION LIMIT connlimit: 指定限制的并发连接数量;
[ENCRYPTED|UNENCRYPTED] PASSWORD 'password': 用于控制是否对系统表中的密码进行加密;
VALID UNTIL 'timestamp': 口令的有效时长;
IN ROLE rname: 指定User成为哪些Role的成员(继承该Role的所有权限);
ROLE rname: 将成为这个新建的角色的成员;
ADMIN rname: 将有这个新建角色的WITH ADMIN OPTION权限;
SYSID uid: 向下兼容,无实际用途;
3、权限管理
一个用户的权限分为两类,一类是在创建用户时候指定的,例如:
CREATEDB | NOCREATEDB 、 SUPERUSER | NOSUPERUSER 、 LOGIN等等,这种权限的增需要用以下语法:
ALTER ROLE rname [ [ WITH ] Option [ ... ] ]
还有一种权限,需要使用GRANT和REVOKE管理,例如:
1)创建Schema;
2)允许在指定数据库中创建临时表;
3)允许创建数据库对象,如表、视图、函数等;
4)对特定对象做SELECT、DELETE、UPDATE、INSERT等等;
5)对序列的操作;
6)在声明表上创建触发器;
7)指定表、索引所在的表空间;
GRANT rname [, ...] TO rname [, ...] [WITH ADMIN OPTION];