pg库角色成员关系
1.pg库可以创建组角色,将普通角色加入该组成为组成员角色,可以继承该组的权限
1.1 创建一个组角色
mydb=# create role login_group;
CREATE ROLE
1.2 创建两个普通角色
mydb=# create role aliex login;
CREATE ROLE
mydb=# create role bob login;
CREATE ROLE
1.3 此时两个普通角色是没查询‘userinfo’表权限的
mydb=> select * from userinfo;
ERROR: permission denied for relation userinfo
1.4 将两个普通角色加入‘login_group’组,并且给‘login_group’组授予查询‘userinfo’表的权限
mydb=# grant login_group to aliex;
GRANT ROLE
mydb=# grant login_group to bob;
GRANT ROLE
mydb=# grant select on userinfo to loggin_group;
GRANT
1.5 此时两个普通角色继承了login_group组查询‘userinfo’的权限
[user1@localhost ~]$ psql -h 192.168.1.200 -U bob mydb;
mydb=> select * from userinfo;
id | name
----+------
1 | 卫庄
1 | tom
(2 rows)
2. 删除角色(drop role rolename)角色如果有对象依赖关系未解除,直接删除会报错
2.1 给bob角色赋予创建数据库的权限
mydb=# alter role bob with createdb;
ALTER ROLE
2.2 使用bob用户登入postgres数据,并创建一个数据库
[user1@localhost ~]$ psql -h 192.168.1.200 -U bob postgres;
postgres=> create database bobdb;
CREATE DATABASE
postgres=> \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+------------+----------+-------------+-------------+---------------------------
bobdb | bob | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 |
2.3 直接删除bob角色验证
mydb=# drop role bob;
ERROR: role "bob" cannot be dropped because some objects depend on it
DETAIL: owner of database bobdb
2.4 将数据库转移给aliex
mydb=# alter database bobdb owner to aliex;
ALTER DATABASE
mydb=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+------------+----------+-------------+-------------+---------------------------
bobdb | aliex | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 |
2.5 数据库依赖关系转移后再次删除bob角色
mydb=# drop role bob;
DROP ROLE
mydb=# \du bob
List of roles
Role name | Attributes | Member of
-----------+------------+-----------
2.6 另一种权限转移的方式
bobdb=# reassign owned by aliex to bob; # 将转移给aliex的bobdb再转移回给bob
bobdb=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+------------+----------+-------------+-------------+---------------------------
bobdb | bob | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 |
2.7 系统默认角色
pg_read_all_settings 读取所有配置变量,包含通常只对超级用户可见的配置变量
pg_read_scan_stats 读取所有‘pg_stat_*’视图并使用各种统计相关的扩展,甚至通常只对超级用户可见的扩展
pg_stat_scan_tables 执行可能对表进行需要很长时间 "ACCESS SHAERE" 锁定的监视功能
pg_signal_backend 给其它后端发送信号
pg_monitor 读取/执行各种监视视图和函数.此角色是pg_read_all_settings,pg_read_scan_stats,pg_stat_scan_tables的成员