先上图一张大而全:
在具体掌握postgresql权限概念之前,首先我们要准确而透彻地了解postgresql的对象层级,如果没法做到那么准确,我来教你啊:
【重点】postgresql对象层级:数据库(database)->模式(schema)->表(table)
再参照上图可以总结出结论:
数据库(database)权限
1、包括Connect、Create、Temporary;
2、Connect很好理解,就是连接数据库的权限,默认创建用户即具有该权限;
3、Create其实是创建下一个层级对象的权限,在这里就是创建模式的权限。
模式(schema)权限
1、包括Create,Usage;
2、Create同样是创建下一个层级对象的权限,在这里就是创建表的权限;
3、Usage就是除了建表权限之外的其他DDL权限,包括删表,修改表结构等。
【知识重点】
个人一直认为postgresql的权限机制是比较割裂的,最明显的体现:即使对schema赋权所有权限,也无法拥有对其表对象数据内容的DML、DQL操作权限。
表(table)权限
1、包括Delete,Insert,References,Select,Trigger,Truncate,Update,这些权限的说明就不多加赘述了。
接下来具体实操:(示例库名:mydb,示例用户名:readonly,示例模式名:myschema)
授予权限:
语法规范
GRANT privilege [, ...] ON object [, ...] TO { PUBLIC | GROUP groupname | username }
数据库级别授权
grant all privileges on database mydb to readonly;
等同于(前后两个sql效果一致):
grant connect,create,temporary on database mydb to readonly;
也可以单一权限授予:
grant create on database mydb to readonly;
模式级别授权
grant all privileges on schema myschema to readonly;
等同于(前后两个sql效果一致):
grant create,usage on schema myschema to readonly;
也可以单一权限授予:
grant usage on schema myschema to readonly;
表级别授权
grant all privileges on all tables in schema myschema to readonly;
等同于(前后两个sql效果一致):
grant delete,insert,references,select,trigger,truncate,update on all tables in schema myschema to readonly;
也可以单一权限授予指定模式下所有表:
grant insert on all tables in schema myschema to readonly;
还可以单一权限授予指定某张表:
grant insert on myschema.mytable to readonly;
回收权限:
语法规范
REVOKE privilege [, ...] ON object [, ...] FROM { PUBLIC | GROUP
groupname | username }
回收权限的操作即是将grant…to…替换为revoke…from…即可。跃跃欲试的小伙伴可以留言写下您的手敲大作哦。