PG的逻辑结构
instance->database->schema->object
权限体系
实例权限->pg_hba.conf
database权限->grant 或revoke是否允许connect或create schema权限
scehma权限->grant或revoke是否允许查询schema中的对象、在schema中创建对象
object权限->grant或revoke select\insert\update\delete等权限
表空间->grant赋与允许在对应表空间创建表、索引、临时表等
默认权限
数据库在创建后,允许public角色连接,即允许任何人连接。
数据库在创建后,不允许除了超级用户和owner之外的任何人在数据库中创建schema。
数据库在创建后,会自动创建名为public的schema,这个schema的all权限已经赋予给了public角色,即允许任何人在里面创建对象,但对己存在的其它用户的表不具有任何权限,包括select
权限查询
1、查看数据库哪些用户可以connect
select datname,datacl from pg_database where datname='su_db';
2、查看指定schema用户所拥有的权限
select nspname,nspacl from pg_namespace where nspname='schema_001';
3、查看某用户的表权限
select * from information_schema.table_privileges where grantee='user_su';
字母代表的权限的意思如下:
r -- SELECT ("read")
w -- UPDATE ("write")
a -- INSERT ("append")
d -- DELETE
D -- TRUNCATE
x -- REFERENCES
t -- TRIGGER
X -- EXECUTE
U -- USAGE
C -- CREATE
c -- CONNECT
T -- TEMPORARY
arwdDxt -- ALL PRIVILEGES (for tables, varies for other objects)
* -- grant option for preceding privilege
权限设置
1、#创建数据库后,取消public登录权限,不影响己连接的session
revoke CONNECT ON DATABASE db_001 from PUBLIC;
2、#取消所有权限
revoke all on database db_001 from public;
3、取消用户默认创建public模式下表的权限
revoke create on schema public from public;
4、赋与连接库的权限
grant connect on database db_001 to user_001;
5、赋与创建schema权限
grant create on database db_001 to user_001;
6、赋与创建表的权限
grant create on schema schema_001 to user_001;
7、赋与修改第6步创建的表的权限
grant usage on schema schema_001 to user_001;
8、单表授权
grant select on public.su_test to user_001;
9、授权查询所有表
GRANT SELECT ON ALL TABLES IN SCHEMA dba TO mobile;
10、下图是PG权限表