5.6. Privileges

创建对象后,将为其分配一个所有者。所有者通常是执行创建语句的角色。对于大多数对象,初始状态是只有所有者(或超级用户)才能对对象执行任何操作。要允许其他角色使用它,必须授予特权

有不同类型的特权:SELECTINSERTUPDATEDELETETRUNCATEREFERENCESTRIGGERCREATECONNECTTEMPORARYEXECUTEUSAGE。适用于特定对象的特权因对象的类型(表,函数等)而异。有关 PostgreSQL 支持的不同类型特权的完整信息,请参见GRANT参考页。以下各节和各章还将向您展示如何使用这些特权。

修改或销毁对象的权利始终仅是所有者的特权。

可以使用该对象相应类型的ALTER命令将其分配给新所有者。 ALTER TABLE。超级用户可以随时执行此操作;如果普通角色既是对象的当前所有者(或所有者角色的成员)又是新所有者角色的成员,则它们只能这样做。

要分配特权,请使用GRANT命令。例如,如果joe是现有角色,而accounts是现有表,则可以使用以下方式授予更新表的特权:

GRANT UPDATE ON accounts TO joe;

写入ALL代替特定特权将授予与该对象类型相关的所有特权。

特殊的“角色”名称PUBLIC可用于为系统上的每个角色授予特权。此外,当数据库的用户很多时,可以设置“组”角色来帮助 Management 特权-有关详细信息,请参见Chapter 21

要撤消特权,请使用适当命名的REVOKE命令:

REVOKE ALL ON accounts FROM PUBLIC;

对象所有者的特殊特权(即执行DROPGRANTREVOKE等的权限)始终是所有者的隐式特权,不能被授予或撤销。但是对象所有者可以选择撤消自己的普通特权,例如使表对自己和其他人都是只读的。

通常,只有对象的所有者(或超级用户)才能授予或撤销对象的特权。但是,可以授予“带有授予选项”的特权,这赋予接收者依次将其授予其他人的权利。如果随后取消了授予选项,则所有从该接收者(直接或通过一系列授予)获得特权的人都将失去该特权。有关详细信息,请参见GRANTREVOKE参考页。