PostgreSQL基础教程:用户角色
最新学讯:近期OCP认证正在报名中,因考试人员较多请尽快报名获取最近考试时间,报名费用请联系在线老师,甲骨文官方认证,报名从速!
我要咨询用户角色是每个数据库都会涉及到的内容,那么PostgreSQL中的用户和角色是怎么一回事呢?我们一起来看看。
1. 用户角色概要
数据库用户user和操作系统用户不同,但是可以通过文件做映射;
角色 role是一系列相关权限的集合,跟用户user的唯一区别是初始创建不具有login权限,但是可以授予;
pg通过角色role来给用户授予权限,管理数据库访问权限;
role在整个cluster中是全局性的,即同一个服务器的不同数据库中,看到的用户是相同的,授予权限后可以访问操作集簇下的数据库对象。
2. 用户角色管理
分类
1)超级用户 -》postgres
2)普通用户 -》create user username;
创建用户
方式1:
在系统命令行使用createuser命令中创建
createuser --help
createuser username
方式2:
在psql命令行使用CREATE ROL[USER]E指令创建
\h create role|user
create role[user] rolename;
创建用户详细语法
CREATE USER name [ [ WITH ] option [ ... ] ]
这里的option可以是:
SUPERUSER | NOSUPERUSER
| CREATEDB | NOCREATEDB
| CREATEROLE | NOCREATEROLE
| CREATEUSER | NOCREATEUSER
| INHERIT | NOINHERIT #角色是其他角色的成员,这些子句决定新角色是否从那些角色中“继承”特权
| LOGIN | NOLOGIN
| REPLICATION | NOREPLICATION
| BYPASSRLS | NOBYPASSRLS #决定是否一个角色可以绕过每一条行级安全性(RLS)策略。
| CONNECTION LIMIT connlimit
| [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password'
| VALID UNTIL 'timestamp'
| IN ROLE role_name [, ...]
| IN GROUP role_name [, ...]
| ROLE role_name [, ...]
| ADMIN role_name [, ...] #ADMIN子句与ROLE相似,让它们能够把这个角色中的成员关系授予给其他人。
| USER role_name [, ...]
| SYSID uid
创建角色详细语法
CREATE ROLE name [ [ WITH ] option [ ... ] ]
这里的option可以是:
SUPERUSER | NOSUPERUSER
| CREATEDB | NOCREATEDB
| CREATEROLE | NOCREATEROLE
| CREATEUSER | NOCREATEUSER
| INHERIT | NOINHERIT
| LOGIN | NOLOGIN
| REPLICATION | NOREPLICATION
| CONNECTION LIMIT connlimit
| [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password'
| VALID UNTIL 'timestamp'
| IN ROLE role_name [, ...]
| IN GROUP role_name [, ...]
| ROLE role_name [, ...]
| ADMIN role_name [, ...]
| USER role_n
常用属性说明
login只有具有 LOGIN 属性的角色可以用做数据库连接的初始角色名。
superuser数据库超级用户
createdb创建数据库权限
createrole允许其创建或删除其他普通的用户角色(超级用户除外)
replication做流复制的时候用到的一个用户属性,一般单独设定。
password在登录时要求指定密码时才会起作用,比如md5或者password模式,跟 客户端的连接认证方式有关
inherit用户组对组员的一个继承标志,成员可以继承用户组的权限特性
注意:
角色属性LOGIN、SUPERUSER和CREATEROLE被视为特殊权限,它们不会像其它数据库对象的普通权限那样被继承。
示例:
CREATE ROLE r3 SUPERUSER;
CREATE ROLE r4 CREATEDB;
CREATE ROLE r5 LOGIN;
CREATE USER u2 encrypted PASSWORD '123456' VALID UNTIL '2018-08-16';
注: 属性LOGIN、SUPERUSER和CREATEROLE被视为特殊权限,它们不会像其它数据库对象的普通权限那样被继承。
查看用户角色列表
\du
示例:
db_t=# \du
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------------------+-----------
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
role1 | Cannot login | {}
role_t | Superuser, Cannot login | {}
user_t | Superuser | {}
中间内容即为角色用户的属性列表,属性会蕴含一些权限含义,后边的字段是表示该用户还在哪个用户组中。
修改角色命令及在线帮助
\h alter role[user]
其他的修改用户的命令还包括:
1、重命名:
alter user UserName rename to NewName;
2、该用户的参数配置参数:
alter user UserName set ParameterName to value;
3、重置配置参数:
alter user UserName reset ParameterName / all;
示例:在创建用户时设定登录权限。
create role r1 ;
create user u1;
连接验证,用户u1可以连接访问数据库,角色r1则不能!
ALTER ROLE r1 WITH LOGIN;
修改角色r1,添加login属性,再次验证角色r1此时可以连接访问数据库。
角色组
包含其他用户或角色的角色就是角色组。
示例:
create r2
grant r1 to r2;
删除
1、系统命令行方式删除
dropuser username;
2、sql环境方式删除
\h drop role [user];
示例:
drop role r1;
注意事项:
1、只用超级用户能够删除超级用户
2、只有具有createrole权限的用户能删除非超级用户
3、删除用户前,需要先删除依赖该用户的对象、权限等信息
4、任何属于该组角色的对象都必须先被删除或者将对象的所有者赋予其它角色,任何赋予该组角色的权限也都必须被撤消。
5、删除组role只会删除组的role本身,组的成员并不会被删除
6、删除该角色前,你必须删除(或者重新授予所有 权)它所拥有的所有对象并且收回该已经授予给该角色的在其他对象上的特权。REASSIGN OWNED和DROP OWNED 命令可以用于这个目的。