一旦一个对象被创建,它会被分配一个所有者。所有者通常是执行创建语句的角色。对于大部分类型的对象,初始状态下只有所有者(或者超级用户)能够对该对象做任何事情。为了允许其他角色使用它,必须分配权限。
有不同种类的权限:SELECT、INSERT、UPDATE、 DELETE、TRUNCATE、REFERENCES、 TRIGGER、CREATE、CONNECT、 TEMPORARY、EXECUTE和USAGE。 适用于特定对象的权限取决于对象的类型(表、函数等)。 关于PostgreSQL支持的不同权限类型的完整信息,请参阅GRANT参考页。 后续的各节和各章还将展示这些权限是如何使用的。
修改或销毁对象的权利始终只属于该对象的拥有者。
可以使用适合对象类型的ALTER命令,将对象分配给新的拥有者,例如ALTER TABLE。超级用户始终可以这样做;普通角色只有同时是对象的当前拥有者(或拥有者角色的成员),并且是新拥有者角色的成员,才能这样做。
分配权限使用GRANT命令。例如,如果joe是一个已有角色,并且accounts是一个已有表,则可以用以下命令授予更新该表的权限:
GRANT UPDATE ON accounts TO joe;
用ALL代替某个具体权限,会授予与该对象类型相关的全部权限。
特殊的“角色”名PUBLIC可用于向系统中的每个角色授予权限。此外,当数据库用户很多时,可以设置“组”角色来协助管理权限 — 详见Chapter 21。
要撤销权限,使用名称贴切的REVOKE命令:
REVOKE ALL ON accounts FROM PUBLIC;
对象拥有者的特殊权限(即执行DROP, GRANT, REVOKE等操作的权利)始终隐含在拥有者身份中,不能授予或撤销。不过,对象拥有者可以选择撤销自己的普通权限,例如将表设为对自己和其他人都只读。
通常,只有对象的拥有者(或超级用户)可以授予或撤销对象上的权限。不过,也可以在授予权限时“附带授权选项”,使接收者有权进一步将该权限授予其他人。如果之后撤销了授权选项,所有从该接收者直接或经过授权链取得此权限的用户都会失去权限。详见GRANT和REVOKE参考页。