吧务
level 11
每个数据库对象都有一个所有者,默认情况下,所有者拥有该对象的所有权限
在数据库中所有的权限都和角色挂钩
权限分为两部分:
系统权限或者数据库用户的属性
数据库对象上的操作权限(内置权限)
对超级用户不做权限检查,其它用户走ACL(Access ControL List)
对于数据库对象,开始只有所有者和超级用户可以做任何操作,其它走ACL
2020年06月04日 05点06分
1
吧务
level 11
------楼2
2. 实例权限
由pg_hba.conf来控制
示例:
# TYPE DATABASE USER ADDRESS METHOD
# IPv4 local connections:
host all all 127.0.0.1/32 trust
host all postgres 0.0.0.0/0 reject
host all all 0.0.0.0/0 md5
以下内容主要由指令grant\revoke完成用户角色权限授予与取消
在线帮助:\h grant
2020年06月04日 06点06分
2
吧务
level 11
----------楼3
3. 表空间权限
语法:
GRANT { CREATE | ALL [ PRIVILEGES ] } ON TABLESPACE tablespace_name [, ...] TO role_specification [, ...] [ WITH GRANT OPTION ]
示例:
表空间路径:/home/postgres/data/user_t
创建表空间:CREATE TABLESPACE tbls_t OWNER user_t LOCATION '/home/postgres/data/user_t';
表空间授权:grant create on tablespace tbls_t to u3;
查看权限:\db+
2020年06月04日 06点06分
3
吧务
level 11
----------楼4
4. 数据库权限
包括允许连接数据库,允许在数据库中创建schema。
默认情况下,数据库在创建后
允许public角色连接,即允许任何人连接。
不允许除了超级用户和owner之外的任何人在数据库中创建schema。
会自动创建名为public 的schema,这个schema的all权限已经赋予给public角色,即允许任何人在里面创建对象。
语法:
GRANT { { CREATE | CONNECT | TEMPORARY | TEMP } [, ...] | ALL [ PRIVILEGES ] }
ON DATABASE database_name [, ...]
TO role_specification [, ...] [ WITH GRANT OPTION ]
备注:WITH GRANT OPTION表示被赋予权限的用户,拿到对应的权限后,还能将对应的权限赋予给其他人,否则只能自己有这个权限,但是不能再赋予给其他人
示例:
create database testdb tablespace tbls_t;
grant connect on database testdb to u1;
#连接验证
\c testdb u1
#创建对象验证
create table t1(id int);
#注意:这是创建表指定表空间后,还会存放在默认表空间中,这里是涉及到表空间的授权。
create table t1(id int) tablespace tbls_t;
#可以创建表对象,存放到默认表空间中(reltablespace字段值为0)
select relname ,reltablespace,relowner from pg_class where relname='t1';
2020年06月04日 06点06分
4
吧务
level 11
----------楼5
5. schema权限
包括允许查看schema中的对象,允许在schema中创建对象;
默认情况下新建的schema的权限不会赋予给public角色;
因此除了超级用户和owner,任何人都没有权限查看schema中的对象或者在schema中新建对象。
语法:
GRANT { { CREATE | USAGE } [, ...] | ALL [ PRIVILEGES ] }
ON SCHEMA schema_name [, ...]
TO role_specification [, ...] [ WITH GRANT OPTION ]
2020年06月04日 06点06分
5
吧务
level 11
----------楼6
6. 对象级别的权限
每种类型的对象权限属性都不一样,以表对象为例:
GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
[, ...] | ALL [ PRIVILEGES ] }
ON { [ TABLE ] table_name [, ...]
| ALL TABLES IN SCHEMA schema_name [, ...] }
TO role_specification [, ...] [ WITH GRANT OPTION ]
2020年06月04日 06点06分
6
吧务
level 11
----------楼7
7. 取消授权
REVOKE
语法格式如下:
REVOKE permission_type ON table_name FROM user_name;
其中permission_type和table_name含义与GRANT指令中相同
\h revoke
2020年06月04日 06点06分
7
吧务
level 11
----------楼8
8. 查看理解权限
显示角色属性(包含系统权限)
\du
或
\du+ [username]
查看系统表
select * from pg_roles[pg_user];
查看某用户或角色的权限
select * from information_schema.table_privileges where grantee='u1';
显示对象的访问权限列表
\z
或
\dp [tablename]
#得到权限说明如下
Schema | Name | Type | Access privileges | Column privileges | Policies
--------+-----------------+----------+--------------------------------+-------------------+----------
public | sbtest1 | table | postgres=arwdDxt/postgres +| |
| | | postgres=a*r*w*d*D*x*t*/postgres | |
public | sbtest10 | table | postgres=arwdDxt/postgres | |
public | sbtest10_id_seq | sequence | | |
public | sbtest11 | table | postgres=arwdDxt/postgres | |
public | sbtest11_id_seq | sequence | | |
public | sbtest12 | table | postgres=arwdDxt/postgres | |
public | sbtest12_id_seq | sequence | | |
2020年06月04日 06点06分
8