GRANT
GRANT — 把访问权限授予一个用户、一个组或所有用户
大纲
GRANTprivilege[, ...] ONobject[, ...] TO { PUBLIC | GROUPgroup|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 语法允许为表中的单个列设置权限,也允许设置把相同权限授予他人的权限:
GRANTprivilege[, ...] ONobject[ (column[, ...] ) ] [, ...] TO { PUBLIC |username[, ...] } [ WITH GRANT OPTION ]
各字段与Postgres实现中的兼容,并有下列补充:
privilegeSQL92允许指定额外的权限:
- SELECT
- REFERENCES
允许在完整性约束中引用指定表/视图的部分或全部列。
- USAGE
允许使用域、字符集、排序规则或转换。如果对象指定的不是表/视图,
privilege必须只指定 USAGE。
object- [ TABLE ]
table SQL92允许额外的无功能关键字
TABLE。- CHARACTER SET
允许使用指定的字符集。
- COLLATION
允许使用指定的排序序列。
- TRANSLATION
允许使用指定的字符集转换。
- DOMAIN
允许使用指定的域。
- WITH GRANT OPTION
允许把相同的权限授予他人。
- [ TABLE ]