標籤:style http color os 使用 ar 資料 sp html
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實現唯讀表