5.7. 權限

如果您建立了一個資料庫對象,那麼您就成為它的所有者。 預設時,只有一個對象的所有者可以在對像上做任何事情。 為了允許其它用戶使用它,我們必須賦予他們權限。 (不過擁有超級用戶權限的用戶總是可以訪問任何對象。)

注意: 為了改變一個資料表,索引,序列,或者視圖的所有者, 使用 ALTER TABLE 命令。

有好幾種不同的權限:SELECTINSERTUPDATEDELETERULEREFERENCESTRIGGERCREATETEMPORARYEXECUTEUSAGE。 適用於特定對象的權限因對像類型(資料表、函數等)而異。 和 ALL PRIVILEGES。有關 PostgreSQL 所支援的不同類型的權限的完整訊息,請參考 GRANT 的手冊頁。下面的章節將為您展示如何利用這些權限。

修改或者刪除一個對象的權限永遠是所有者獨有的權限。

注意: 要改變一個資料表,索引,序列,或者視圖的所有者,使用 ALTER TABLE 命令。 還有對應其它對像類型的 ALTER 命令。

要賦予一個權限,我們使用 GRANT 命令。 因此,如果 joe 是一個現存的用戶,而 accounts 是一個已經存在的資料表, 更新資料表的權限可以用下面的命令賦予

GRANT UPDATE ON accounts TO joe;

要給一個組賦予權限,使用

GRANT SELECT ON accounts TO GROUP staff;

名字叫PUBLIC的特殊"用戶"可以用於 將權限賦予系統中的每一個用戶。在聲明權限的位置寫 ALL 則將所有的與該對像類型相關的權限都賦予出去。

要撤銷一個權限,使用合適的 REVOKE 命令:

REVOKE ALL ON accounts FROM PUBLIC;

對像所有者的特殊權限(也就是做 DROPGRANTREVOKE,等等的權限)總是隱含地屬於所有者,並且不能 賦予或者撤銷。但是對像所有者可以選擇撤銷自己的普通權限, 比如把一個資料表做成對他自己和別人都是只讀的。

最初,只有對象所有者(或者超級用戶)可以賦予或者撤銷對象的權限。 但是,我們可以賦予一個 "with grant option" 權限,這樣就給接受權限的人以授予該權限給其它人的權限。 如果授予選項後來被撤銷,那麼所有那些從這個接受者接受了權限的用戶(直接或者透過級連的授權)都將失去該權限。 細節詳見 GRANTREVOKE 手冊頁。