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