pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
GRANT — 把访问权限授予一个用户、一个组或所有用户
GRANTprivilege[, ...] ONobject[, ...] TO { PUBLIC | GROUPgroup|username}
privilege可能的权限有:
访问指定表/视图的所有列。
向指定表的所有列插入数据。
更新指定表的所有列。
从指定表中删除行。
在表/视图上定义规则 (见 CREATE RULE 语句)。
授予所有权限。
object要授予访问权限的对象的名称。可能的对象有:
table
view
sequence
index
代表所有用户的简写形式。
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
目前,要创建 GROUP,必须手工向表 pg_group 中插入数据:
INSERT INTO pg_group VALUES ('todos');
CREATE USER miriam IN GROUP todos;
参阅 REVOKE 语句来撤销访问权限。
把表 films 上的插入权限授予所有用户:
GRANT INSERT ON films TO PUBLIC;
把视图 kinds 上的所有权限授予用户 manuel:
GRANT ALL ON kinds TO manuel;
SQL92的 GRANT 语法允许为表中的单个列设置权限,也允许设置把相同权限授予他人的权限:
GRANTprivilege[, ...] ONobject[ (column[, ...] ) ] [, ...] TO { PUBLIC |username[, ...] } [ WITH GRANT OPTION ]
各字段与Postgres实现中的兼容,并有下列补充:
privilegeSQL92允许指定额外的权限:
允许在完整性约束中引用指定表/视图的部分或全部列。
允许使用域、字符集、排序规则或转换。 如果对象指定的不是表/视图, privilege 必须只指定 USAGE。
objecttableSQL92允许额外的无功能关键字TABLE。
允许使用指定的字符集。
允许使用指定的排序序列。
允许使用指定的字符集转换。
允许使用指定的域。
允许把相同的权限授予他人。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。