18.3. 权限

在创建对象的时候,它会被赋予一个所有者。通常所有者就是执行创建语句的角色。 对于大多数类型的对象,初始状态是只有所有者(或者超级用户)可以对该对象做任何事情。 要允许其它用户使用这个对象,必须赋予权限。 系统里面有好几种不同类型的权限:SELECTINSERTUPDATEDELETERULEREFERENCESTRIGGERCREATETEMPORARYEXECUTE,和 USAGE。 有关 PostgreSQL 支持的不同类型的权限的更多信息, 请参阅 GRANT 参考页。

要赋予权限,我们使用 GRANT 命令。 所以,如果 joe 是一个现有的角色, 而 accounts 是一个现有的表,那么可以用下面的命令更新表的权限

GRANT UPDATE ON accounts TO joe;

我们可以用特殊的名字 PUBLIC 把对象的权限赋予系统中的所有角色。 在权限声明的位置上写 ALL,表示把适用于该对象的所有权限都赋予目标角色。

要撤销权限,使用合适的 REVOKE 命令:

REVOKE ALL ON accounts FROM PUBLIC;

对象的所有者是一个特殊的权限(也就是说,修改和删除对象的权限)总是隐含地属于所有者, 不能赋予或者删除,但是所有者可以选择撤销他拥有的普通权限,比如, 把一个表做成对自己是只读的或者其它什么的东西。

只要对象的类型合适,我们可以用一个 ALTER 命令给这个对象赋予一个新的所有者。 超级用户总是能做这件事奇怪; 普通的角色只能是在他们目前是该对象的所有者(或者是所有角色的成员)并且是新的所有角色的成员的情况下做这个事情。