PostgreSQL中只读表的实现能够分为两部分:命令操做前数据库中已有的表、命令操做后数据库新建的表。在本文中会就这两部分分别加以实现从而实现完整的只读查询。
html
数据库:PostgreSQL 9.3
sql
用户:user一、user2数据库
模式:shema1(全部者为user1)post
表:shema1.t1(id int)spa
对此时已有的表shema1.t1实现user2的只读访问,分别须要通过:对shema1模式的访问权限、对t1表的select访问权限。操做以下:postgresql
以user1用户或superuser执行命令:htm
grant usage on schema shema1 to user2;对象
在PostgreSQL中,模式上的权限有:create和usgae两种,usage权限表示用户能够访问该模式,并查询该模式下有那些对象;create权限表示用户能够在该模式下建立对象。此处仅须要user2用户拥有schema1模式的访问权限便可,若未赋予该权限,user2用户在查询时会报错在该schema上的权限不足。
get
而后,继续执行命令:
table
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模式的权限操做。