5.7. 权限

如果你创建了一个数据库对象,那么你就成为它的所有者。 缺省时,只有一个对象的所有者可以在对象上做任何事情。 为了允许其它用户使用它,我们必须赋予他们权限。 (还有拥有超级用户权限的用户。这些用户总是可以访问任何对象。)

注意: 为了改变一个表,索引,序列,或者视图的所有者, 使用 ALTER TABLE 命令。

有好几种不同的权限:SELECTINSERTUPDATEDELETERULEREFERENCESTRIGGERCREATETEMPORARYEXECUTEUSAGE, 和 ALL PRIVILEGES。有关 PostgreSQL 所支持的不同类型的权限的完整信息,请参考 GRANT 的手册页。下面的章节将为你展示如何利用这些权限。

修改或者删除一个对象的权限永远是所有者独有的权限。

要赋予一个权限,我们使用 GRANT 命令。 因此,如果 joe 是一个现存的用户,而 accounts 是一个已经存在的表, 更新表的权限可以用下面的命令赋予

GRANT UPDATE ON accounts TO joe;

执行这条命令的用户必须是表的所有者。要给一个组赋予权限, 使用

GRANT SELECT ON accounts TO GROUP staff;

名字叫PUBLIC的特殊"用户"可以用于 将权限赋予系统中的每一个用户。在声明权限的位置写 ALL 则将所有的权限都赋予出去。

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

REVOKE ALL ON accounts FROM PUBLIC;

表所有者的特殊权限(也就是做 DROPGRANTREVOKE,等等的权限)总是隐含地属于所有者,并且不能 赋予或者撤销。但是表所有者可以选择撤销自己的普通权限, 比如把一个表做成对他自己和别人都是只读的。