GRANT on Database Objects

更新時間:
Copy as MD

GRANT命令的此變體向角色授予特定的資料庫物件特權。這些特權會添加到已經授予的特權中(如果存在)。

關鍵字 PUBLIC 表示將特權授予所有角色,包括將來可能建立的角色。PUBLIC 可以視為一個隱式定義的組,其中始終包含所有角色。所有特定角色具有向其直接授予的特權、向其當前作為其中成員的任何角色授予的特權以及授予 PUBLIC 的特權。

如果指定 WITHGRANT OPTION,則接收特權的角色可以再將特權授予其他角色。如果不使用授權選項,則接收方不能這樣做。不能將授權選項授予 PUBLIC

無需向對象所有者(通常是建立對象的使用者)授予特權,因為所有者在預設情況下具有所有特權。(不過,所有者可以選擇撤銷自己的部分特權以保證安全。)可授予特權中不包括刪除對象或以任何方式對其定義進行變更的權利;這是所有者的固有權利,不能將其授予其他使用者或撤銷。另外,所有者絕對具有所有授權選項。

根據對象的類型,初始預設特權可能包括將部分特權授予 PUBLIC。預設特權是指對錶進行非公開訪問以及對函數、預存程序和包的 EXECUTE 特權。對象所有者當然可以撤銷這些特權。(為了最大程度地保證安全,請通過建立對象的同一個事務發出 REVOKE;之後,不存在其他使用者可以使用該對象的視窗。)

特權可能包括如下表所示。

特權說明
SELECT允許對所指定表、視圖或序列的所有列執行 SELECT。對於序列,該特權還允許使用 currval 函數。
INSERT允許對所指定表執行 INSERT 操作以插入新行。
UPDATE允許對所指定表的列執行 UPDATESELECT ... FOR UPDATE 還需要此特權(除 SELECT 特權外)。
DELETE允許對所指定表的行執行 DELETE
REFERENCES要建立外鍵約束,需要對參考資料表和被參考資料表都具有此特權。
EXECUTE允許使用指定的包、預存程序或函數。應用於包時,允許使用所有包的公用預存程序、公用函數、公開變數、記錄、游標以及其他公用對象和物件類型。這是唯一一個適用於函數、預存程序和包的特權類型。

PolarDB PostgreSQL版(相容Oracle)中授予 EXECUTE 特權的文法與 Oracle 資料庫並不完全相容。PolarDB PostgreSQL版(相容Oracle)需要使用以下關鍵字之一限定程式名稱:FUNCTIONPROCEDUREPACKAGE;而在 Oracle 中,必須省略這些關鍵字。對於函數,PolarDB PostgreSQL版(相容Oracle)需要在函數名稱後包括所有輸入(ININ OUT)參數資料類型(如果沒有函數參數,則包含空括弧)。對於預存程序,如果其中具有一個或多個輸入參數,則必須指定所有輸入參數資料類型。在 Oracle 中,必須省略函數和預存程序簽名。這是因為在 Oracle 中,所有程式共用同一個命名空間,而在 PolarDB PostgreSQL版(相容Oracle)中,函數、預存程序和包具有它們自己的單獨命名空間,從而在某種程度上允許重載程式名稱。

ALL PRIVILEGES一次性授予所有可用特權。

其他命令需要的特權在對應命令的參考頁面上列出。