PostgreSQL实现只读表
PostgreSQL中只读表的实现可以分为两部分:命令操作前数据库中已有的表、命令操作后数据库新建的表。在本文中会就这两部分分别加以实现从而实现完整的只读查询。
一、初始环境
数据库:PostgreSQL 9.3
用户:user1、user2
模式:shema1(所有者为user1)
表:shema1.t1(id int)
二、已有的表
对此时已有的表shema1.t1实现user2的只读访问,分别需要经过:对shema1模式的访问权限、对t1表的select访问权限。操作如下:
以user1用户或superuser执行命令:
grant usage on schema shema1 to user2;
在PostgreSQL中,模式上的权限有:create和usgae两种,usage权限表示用户可以访问该模式,并查询该模式下有那些对象;create权限表示用户可以在该模式下创建对象。此处仅需要user2用户拥有schema1模式的访问权限即可,若未赋予该权限,user2用户在查询时会报错在该schema上的权限不足。
然后,继续执行命令:
grant select on all tables in schema schema1 to user2;
该命令实现将shema1模式中现在已有的所有表的select权限赋予给user2用户。
通过这两条命令最终实现user2用户对schema1模式中现已有的所有表的只读访问。
三、新建的表
user2用户对user1后期新建表的只读访问同样需要分两部:schema模式的权限、后期新建表的select权限。
对schema1的权限可参照上文,此处不再赘述;对后期新建表的select权限可通过alter default privileges命令实现(该命令属于9.0后新增)。
具体命令如下:
alter defualt privileges in schema shema1 grant select on tables user2;
通过这条命令可以实现在该命令之后user2用户对user1新建表的select只读访问。
四、后记
通过这两部操作最终就实现了user2用户对user1用户在shema1模式所有表的只读访问。
对于默认情况(此处是指所有用户都使用public模式),可以略过对shema模式的权限操作。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。