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模式的权限操作。


你可能感兴趣的:(PostgreSQL实现只读表)