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模式的權限操做。

相關文章
相關標籤/搜索