20.3. 权限

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

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

GRANT UPDATE ON accounts TO joe;

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

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

REVOKE ALL ON accounts FROM PUBLIC;

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

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