

Part 6:PG用户与角色管理
| 内容1 | PostgreSQL 创建用户 |
| 内容2 | PostgreSQL 创建角色 |
| 内容3 | PostgreSQL 权限介绍 |
| 内容4 | PostgreSQL 给用户授权 |
| 内容5 | PostgreSQL 给角色授权 |
| 内容6 | PostgreSQL 回收权限 |
6.1、用户角色概述
用户与角色:
Ø 数据库用户用来访问、管理数据库中的对象(表、索引…)
Ø 数据库角色用来管理数据库访问权限,简化权限的管理
Ø 用户和角色在整个数据库集簇中是全局性的,不是针对某个单一数据库,只要有足够的权限,用户可以访问所有数据库的对象。
Ø 数据库用户可以分为两类:
超级用户--postgres
用户与角色的区别:
Ø user:拥有login登陆数据库权限的role
Ø role:可以拥有数据库对象,如表、索引,也可以把这些对象上的权限赋予其它角色,以控制哪些用户对哪些对象拥有哪些权限
Ø group:不拥有replication/noreplication、connectionlimit属性的role
Ø 在PG8.1之前,user与group是不同类型的实体,现在可以被看作是role,任意一个role均可自由的在user与group间转换
6.2、创建用户
创建用户
Ø 方式1:在系统命令行使用create user命令
create user usernamecreate user -U postgres -p 7788 user1 (--forwindows)
Ø 方式2:在psql命令行使用create user(role)指令
CREATE user[ROLE] rolename;
CREATE USER name [[WITH] option[...]]
这里的option可以是:
SUPERUSER | NOSUPERUSER|CREATEDB | NOCREATEDB|CREATEROLE | NOCREATEROLE|CREATEUSER | NOCREATEUSER|INHERIT | NOINHERIT#角色是其他角色的成员,这些子句决定新角色是否从那些角色中“继承”特权|LOGIN | NOLOGIN|REPLICATION | NOREPLICATION|BYPASSRLS | NOBYPASSRLS#决定是否一个角色可以绕过每一条行级安全性(RLS)策略。|CONNECTIONLIMIT connlimit|[ENCRYPTED | UNENCRYPTED] PASSWORD 'password'|VALIDUNTIL 'timestamp' | INROLE role_name [,...]|INGROUP role_name[,...] | ROLErole_name[,...]|ADMINrole_name[,...]#ADMIN子句与ROLE相似,让它们能够把这个角色中的成员关系授予给其他人。|USER role_name[,...] |SYSID uid
创建用户示例:
CREATE USER u1 SUPERUSER PASSWORD 'u1';--创建一个具有超级用户权限的用户
CREATE USER u2 CREATEDB PASSWORD 'u2';--创建一个具有建库权限的用户
CREATE USER u3 LOGIN;--创建一个具有登录权限的用户,默认值
CREATE ROLE u4 encrypted PASSWORD '123456' VALIDUNTIL '2018-08-16';--创建一个带有加密密码且具有有效时间的用户
6.3、创建角色
CREATE ROLE name [[WITH]option[...]] 这里的option可以是: SUPERUSER | NOSUPERUSER|CREATEDB | NOCREATEDB|CREATEROLE | NOCREATEROLE|CREATEUSER | NOCREATEUSER|INHERIT | NOINHERIT|LOGIN | NOLOGIN|REPLICATION | NOREPLICATION|CONNECTIONLIMIT connlimit|[ENCRYPTED | UNENCRYPTED] PASSWORD 'password'|VALIDUNTIL 'timestamp' | INROLE role_name[,...]|INGROUP role_name[,...] | ROLE role_name[,...]|ADMIN role_name[,...] | USER role_name[,...] | SYSID uid
创建角色示例
CREATE ROLE manager;--创建一个角色
CREATE ROLE dev createdb;--创建一个具有建库权限的角色
CREATE ROLE r1 LOGIN;--创建一个具有登录权限的角色,类似于用户
CREATE ROLE u4 encrypted PASSWORD ‘123456’ VALIDUNTIL ‘2018-08-16’;--创建一个带有加密密码且具有有效时间的角色
6.4、查看用户与角色
查看用户与角色信息
postgres=#\du 指令显示用户和角色属性

通过数据库字典表来查看用户信息
postgres=# \d pg_user

通过数据库字典表来查看

通过数据库字典表来查看角色信息

通过数据库字典表来查看角色信息

6.5、修改用户和角色
修改用户属性
postgres=# \h alter user
命令:ALTER USER
描述:更改数据库角色
语法:
ALTER USER role_specification [ WITH ] 选项 [ ... ]
选项可以是
SUPERUSER | NOSUPERUSER| CREATEDB | NOCREATEDB| CREATEROLE | NOCREATEROLE| INHERIT | NOINHERIT| LOGIN | NOLOGIN| REPLICATION | NOREPLICATION| BYPASSRLS | NOBYPASSRLS| CONNECTION LIMIT 连接限制| [ ENCRYPTED ] PASSWORD '口令' | PASSWORD NULL| VALID UNTIL '时间戳'
……
修改用户示例
ALTER USER u2 RENAME TO u22;--修改用户的名字
ALTER USER u22 PASSWORD ‘u22’;--修改用户的密码
ALTER USER u22 CREATEROLE;--修改用户的权限
ALTER USER u22 IN DATABASE testdb RESET ALL;--修改数据库testdb中的参数重设 为默认值
修改角色示例
ALTER ROLE dev RENAME TO dev1;--修改角色的名字
ALTER ROLE dev1 SUPERUSER;--修改角色的权限
ALTER ROLE dev1 LOGIN;--修改角色的权限
6.6、删除用户
删除用户方法:
drop role rolename; 或 drop user username;
DROP ROLE IF EXISTS role_name;
删除用户与角色示例:
DROP USER u22;
DROP USER IF EXISTS u3;
DROP ROLE IF EXISTS u4;
6.7、启用角色赋予的权限
启用某个角色权限:
Set role manager;
注意:此时登陆的用户名变成manager。在此期间创建的对象也是属于manager。
6.8、权限管理
权限管理
Ø 每个数据库对象都有一个所有者,默认情况下,所有者拥有该对象的所有权限
Ø 在数据库中所有的权限都和角色挂钩
Ø 对超级用户postgres不做权限检查,其它用户走ACL(Access ControL List)
Ø 对于数据库对象,开始只有所有者和超级用户可以做任何操作,其它走ACL
权限管理结构层次图



相关阅读:
蓝蓝的天
-->> 联系客服,进群或领取文档资料




