↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1 / 7.0 / 6.5 / 6.4
历史版本PostgreSQL 7.2 已于 2007 年 2 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

GRANT

GRANT — 定义访问权限

大纲

GRANT { { SELECT | INSERT | UPDATE | DELETE | RULE | REFERENCES | TRIGGER } [,...] | ALL [ PRIVILEGES ] }
    ON [ TABLE ] objectname [, ...]
    TO { username | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ]

描述

GRANT命令把对象(表、视图、序列)上的特定权限授予一个或多个用户或用户组。这些权限会叠加在已有权限(如果有)之上。

关键字PUBLIC表示权限将授予所有用户,包括以后可能创建的用户。可以把PUBLIC看作一个隐式定义的、始终包含所有用户的组。注意,任何特定用户所拥有的权限,是他直接被授予的权限、他被授予的当前所属各组的权限,以及授予PUBLIC的权限之和。

除对象的创建者之外的用户对对象没有任何访问权限,除非创建者授予权限。无需把权限授予对象的创建者,因为创建者自动持有所有权限。(不过,创建者也可以出于安全考虑选择撤销他自己的某些权限。注意,授予和撤销权限的能力是创建者固有的,不会丢失。删除对象的权利同样是创建者固有的,不能被授予或撤销。)

可能的权限有:

SELECT

允许对指定表、视图或序列的任意列进行SELECT。还允许使用 COPY FROM。

INSERT

允许向指定表中INSERT新行。还允许 COPY TO。

UPDATE

允许对指定表的任意列进行UPDATE。除SELECT权限之外,SELECT ... FOR UPDATE还需要此权限。对于序列,此权限允许使用nextval、currval和setval。

DELETE

允许从指定表中DELETE行。

RULE

允许在表/视图上创建规则。(见CREATE RULE语句。)

REFERENCES

要创建一个带外键约束的表,必须在包含被引用键的表上拥有此权限。

TRIGGER

允许在指定表上创建触发器。(见 CREATE TRIGGER语句。)

ALL PRIVILEGES

一次性授予上述所有权限。在PostgreSQL中PRIVILEGES关键字是可选的,但严格的 SQL 要求它。

其他命令所需的权限列在各自命令的参考页上。

注意

应当注意,数据库超级用户可以访问所有对象,而不受对象权限设置的限制。这与 Unix 系统中root的权利类似。与root一样,除非绝对必要,以超级用户身份操作是不明智的。

目前,在PostgreSQL中要只对少数几个列授予权限,必须创建一个包含所需列的视图,然后把权限授予该视图。

使用psql的\z命令获取现有对象上权限的信息:

          Database    = lusitania
   +------------------+---------------------------------------------+
   |  Relation        |        Grant/Revoke Permissions             |
   +------------------+---------------------------------------------+
   | mytable          | {"=rw","miriam=arwdRxt","group todos=rw"}   |
   +------------------+---------------------------------------------+
   Legend:
         uname=arwR -- privileges granted to a user
   group gname=arwR -- privileges granted to a group
              =arwR -- privileges granted to PUBLIC

                  r -- SELECT ("read")
                  w -- UPDATE ("write")
                  a -- INSERT ("append")
                  d -- DELETE
                  R -- RULE
                  x -- REFERENCES
                  t -- TRIGGER
            arwdRxt -- ALL PRIVILEGES

REVOKE命令用于撤销访问权限。

示例

把表 films 上的插入权限授予所有用户:

GRANT INSERT ON films TO PUBLIC;

把视图kinds上的所有权限授予用户manuel:

GRANT ALL PRIVILEGES ON kinds TO manuel;

兼容性

SQL92

ALL PRIVILEGES中的PRIVILEGES关键字是必需的。SQL不支持在一条命令中为多个表设置权限。

SQL92的 GRANT 语法允许为表中的单个列设置权限,也允许设置把相同权限授予他人的权限:

GRANT privilege [, ...]
    ON object [ ( column [, ...] ) ] [, ...]
    TO { PUBLIC | username [, ...] } [ WITH GRANT OPTION ]

SQL允许为其他类型的对象授予 USAGE 权限:CHARACTER SET、COLLATION、TRANSLATION、DOMAIN。

TRIGGER 权限是在 SQL99 中引入的。RULE 权限是 PostgreSQL 扩展。

另见

REVOKE

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。