GRANT on Database Objects
GRANT命令的此變體向角色授予特定的資料庫物件特權。這些特權會添加到已經授予的特權中(如果存在)。
關鍵字 PUBLIC 表示將特權授予所有角色,包括將來可能建立的角色。PUBLIC 可以視為一個隱式定義的組,其中始終包含所有角色。所有特定角色具有向其直接授予的特權、向其當前作為其中成員的任何角色授予的特權以及授予 PUBLIC 的特權。
如果指定 WITHGRANT OPTION,則接收特權的角色可以再將特權授予其他角色。如果不使用授權選項,則接收方不能這樣做。不能將授權選項授予 PUBLIC。
無需向對象所有者(通常是建立對象的使用者)授予特權,因為所有者在預設情況下具有所有特權。(不過,所有者可以選擇撤銷自己的部分特權以保證安全。)可授予特權中不包括刪除對象或以任何方式對其定義進行變更的權利;這是所有者的固有權利,不能將其授予其他使用者或撤銷。另外,所有者絕對具有所有授權選項。
根據對象的類型,初始預設特權可能包括將部分特權授予 PUBLIC。預設特權是指對錶進行非公開訪問以及對函數、預存程序和包的 EXECUTE 特權。對象所有者當然可以撤銷這些特權。(為了最大程度地保證安全,請通過建立對象的同一個事務發出 REVOKE;之後,不存在其他使用者可以使用該對象的視窗。)
特權可能包括如下表所示。
| 特權 | 說明 |
| SELECT | 允許對所指定表、視圖或序列的所有列執行 SELECT。對於序列,該特權還允許使用 currval 函數。 |
| INSERT | 允許對所指定表執行 INSERT 操作以插入新行。 |
| UPDATE | 允許對所指定表的列執行 UPDATE。SELECT ... FOR UPDATE 還需要此特權(除 SELECT 特權外)。 |
| DELETE | 允許對所指定表的行執行 DELETE。 |
| REFERENCES | 要建立外鍵約束,需要對參考資料表和被參考資料表都具有此特權。 |
| EXECUTE | 允許使用指定的包、預存程序或函數。應用於包時,允許使用所有包的公用預存程序、公用函數、公開變數、記錄、游標以及其他公用對象和物件類型。這是唯一一個適用於函數、預存程序和包的特權類型。 PolarDB PostgreSQL版(相容Oracle)中授予 |
| ALL PRIVILEGES | 一次性授予所有可用特權。 |
其他命令需要的特權在對應命令的參考頁面上列出。