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 | 一次性授予所有可用特权。 |
其他命令需要的特权在对应命令的参考页面上列出。