在开始话题之前,先讲解下 PostgreSQL 里的用户和角色的一些知识,在 PostgreSQL 里没有区分用户和角色的概念,CREATE USER
为 CREATE ROLE
的别名,这两个命令几乎是完全相同的,唯一的区别是”CREATE USER”命令创建的用户的 LOGIN 属性默认为 on , 而 CREATE ROLE
命令创建的用户的 NOLOGIN 属性默认为 on。
在 Oracle 里,可以通过角色赋权,例如新建一个用户后,可以把 connect ,RESOURCE 等角色赋给新建的用户,在PostgreSQL 里也可以实现通过角色赋权,PostgreSQL 是通过角色继承的方式实现,下面看下具体实现过程。
创建 CP 角色
创建角色和创建用户的语法一样,如下创建 CP 角色。
1 |
postgres=# create role cp login nosuperuser nocreatedb nocreaterole noinherit encrypted password 'cp'; |
给 CP 角色赋权
给 CP 用户赋予数据库 skytf 连接权限和相关表的查询权限
1 |
postgres=# grant connect on database skytf to cp; |
创建用户 cp_1
1 |
skytf=> /c postgres postgres |
将 cp 角色赋给 cp_1 用户
方法一
1 |
skytf=# grant cp to cp_1; |
方法二
1 |
postgres=# create role cp_2 login nosuperuser nocreatedb nocreaterole inherit encrypted password 'cp_2' in role cp; |
备注:上面提供了两种方法将 cp 角色的权限赋给其它用户,第二种方法是在创建用户时即赋予了角色权限。
测试 cp_1 用户的权限
1 |
skytf=# /c skytf cp_1; |
查询角色、用户信息
1 |
postgres=# /du |
备注:/du 命令显示用户信息, “ Member of “ 项表示 cp_1, cp_2 用户属于 cp 用户组。
附 CREATE ROLE 语法
CREATE ROLE
Name
CREATE ROLE – define a new database role
Synopsis
CREATE ROLE name [ [ WITH ] option [ … ] ]
where option can be:
SUPERUSER | NOSUPERUSER
| CREATEDB | NOCREATEDB
| CREATEROLE | NOCREATEROLE
| CREATEUSER | NOCREATEUSER
| INHERIT | NOINHERIT
| LOGIN | NOLOGIN
| 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_name [, …]
| SYSID uid Description
原创文章,作者:bd101bd101,如若转载,请注明出处:https://blog.ytso.com/237810.html