PostgreSQL实现只读表

        PostgreSQL中只读表的实现能够分为两部分:命令操做前数据库中已有的表、命令操做后数据库新建的表。在本文中会就这两部分分别加以实现从而实现完整的只读查询。
html

1、初始环境

数据库:PostgreSQL 9.3
sql

用户:user一、user2数据库

模式:shema1(全部者为user1)post

表:shema1.t1(id int)spa

2、已有的表

        对此时已有的表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模式中现已有的全部表的只读访问。


3、新建的表

        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只读访问。

4、后记

     经过这两部操做最终就实现了user2用户对user1用户在shema1模式全部表的只读访问。

      对于默认状况(此处是指全部用户都使用public模式),能够略过对shema模式的权限操做。

相关文章
相关标签/搜索