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

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.1 已于 2006 年 4 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

GRANT

GRANT — 把访问权限授予一个用户、一个组或所有用户

大纲

GRANT privilege [, ...] ON object [, ...]
    TO { PUBLIC | GROUP group | username }
  

输入

privilege

可能的权限有:

SELECT

访问指定表/视图的所有列。

INSERT

向指定表的所有列插入数据。

UPDATE

更新指定表的所有列。

DELETE

从指定表中删除行。

RULE

在表/视图上定义规则 (见 CREATE RULE 语句)。

ALL

授予所有权限。

object

要授予访问权限的对象的名称。可能的对象有:

  • table

  • view

  • sequence

PUBLIC

代表所有用户的简写形式。

GROUP group

被授予权限的一个组 group。

username

被授予权限的用户的名称。PUBLIC 是代表所有用户的简写形式。

输出

CHANGE

如果成功则返回此消息。

ERROR: ChangeAcl: class "object" not found

如果指定的对象不可用,或者无法把权限授予指定的组或用户,则返回此消息。

描述

GRANT允许对象的创建者把特定权限授予所有用户(PUBLIC)或某个用户或组。除非创建者在对象创建之后 GRANT 权限,除创建者之外的用户没有任何访问权限。

一旦用户拥有了对象上的某个权限,他就能够行使该权限。无需向对象的创建者 GRANT 权限,创建者自动持有所有权限,并且也可以删除对象。

注意

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

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

          Database    = lusitania
   +------------------+---------------------------------------------+
   |  Relation        |        Grant/Revoke Permissions             |
   +------------------+---------------------------------------------+
   | mytable          | {"=rw","miriam=arwR","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
                  w -- UPDATE/DELETE
                  a -- INSERT
                  R -- RULE
               arwR -- ALL
    

参阅 REVOKE 语句来撤销访问权限。

用法

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

GRANT INSERT ON films TO PUBLIC;
   

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

GRANT ALL ON kinds TO manuel;
   

兼容性

SQL92

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

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

各字段与Postgres实现中的兼容,并有下列补充:

privilege

SQL92允许指定额外的权限:

SELECT
REFERENCES

允许在完整性约束中引用指定表/视图的部分或全部列。

USAGE

允许使用域、字符集、排序规则或转换。 如果对象指定的不是表/视图, privilege 必须只指定 USAGE。

object
[ TABLE ] table

SQL92允许额外的无功能关键字TABLE。

CHARACTER SET

允许使用指定的字符集。

COLLATION

允许使用指定的排序序列。

TRANSLATION

允许使用指定的字符集转换。

DOMAIN

允许使用指定的域。

WITH GRANT OPTION

允许把相同的权限授予他人。

提交更正

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