5.7. 权限

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

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

有好几种不同的权限:SELECTINSERTUPDATEDELETERULEREFERENCESTRIGGERCREATETEMPORARYEXECUTEUSAGE。 适用于特定对象的权限因对象类型(表、函数等)而异。 和 ALL PRIVILEGES。有关 PostgreSQL 所支持的不同类型的权限的完整信息,请参考 GRANT 的手册页。下面的章节将为你展示如何利用这些权限。

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

注意: 要改变一个表,索引,序列,或者视图的所有者,使用 ALTER TABLE 命令。 还有对应其它对象类型的 ALTER 命令。

要赋予一个权限,我们使用 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,等等的权限)总是隐含地属于所有者,并且不能 赋予或者撤销。但是对象所有者可以选择撤销自己的普通权限, 比如把一个表做成对他自己和别人都是只读的。

最初,只有对象所有者(或者超级用户)可以赋予或者撤销对象的权限。 但是,我们可以赋予一个 "with grant option" 权限,这样就给接受权限的人以授予该权限给其它人的权限。 如果授予选项后来被撤销,那么所有那些从这个接受者接受了权限的用户(直接或者通过级连的授权)都将失去该权限。 细节详见 GRANTREVOKE 手册页。