权限

PostgreSQL 9.4.4 中文手册
上一页 | 上一级 | 章 5. 数据定义 | 下一页

# 5.6. 权限

当创建一个数据库对象时，它就被赋予了所有者。这个所有者通常是执行创建语句的角色。 对大多数类型的对象，初始状态只有其所有者（或者超级管理员）可以对它做任何事情。 要允许其他角色使用它，必须要经过权限授予。

有好多种不同的权限：`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`的特殊"用户"可以用于将权限赋予系统中的所有用户。 另外，还可以使用"组"角色来帮助管理一群用户的权限，细节可参见第 20 章。

可以使用`REVOKE`命令撤销权限：

    REVOKE ALL ON accounts FROM PUBLIC;

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

最初，只有对象所有者(或者超级用户)可以赋予或者撤销对象的权限。但是， 我们可以赋予一个"with grant option"权限，这样就允许接受权限的人将该权限转授他人。 如果授权选项后来被撤销，那么所有那些从这个接受者接受了权限的用户(直接或间级)都将失去该权限。 细节详见GRANT和REVOKE手册页。

上一页 | 起始页 | 下一页
修改表 | 上一级 | 模式