GRANT
名称
GRANT — 赋予一个用户一个组或所有用户访问权限
GRANT privilege [ ] ON object [ ]
TO { PUBLIC | GROUP group | username }
输入
privilege
可能的权限有
SELECT
访问声明的表/视图的所有列/字段.
INSERT
向声明的表中插入所有列字段.
UPDATE
更新声明的所有列/字段.
DELETE
从声明的表中删除所有行.
RULE
在表/视图上定义规则 (参见 CREATE RULE 语句).
ALL
赋予所有权限.
object
赋予权限的对象名.可能的对象是
?table (表)
?view (视图)
?sequence (序列)
?index (索引)
PUBLIC
代表是所有用户的简写.
GROUP group
将要赋予权限的组 group .目前的版本中组必须是用下面方法显式创建的.
username
将要赋予权限的用户名.PUBLIC 是代表所有用户的简写.
输出
CHANGE
如果成功返回此信息.
ERROR: ChangeAcl: class object not found
如果所声明的对象不可用或不可能对声明的组或用户赋予权限.
描述
GRANT 允许对象的创建者给某用户或某组或所有用户(PUBLIC)某些特定的权限.对象创建后除了创建者外除非创建者赋予(GRANT)权限其他人没有访问对象的权限.
一旦用户有某对象的权限他就可以使用那个特权.不需要给创建者赋予(GRANT)对象的权限创建者自动拥有对象的所有权限包括删除它的权限.
注意
目前要想在 Postgres 里面只赋予几列权限你必须创建一个包含那几列的视图(view)然后把权限赋予那几个视图
使用 psql \z 命令获取关于现存对象权限的更多信息
Database = lusitania
+++
| Relation | Grant/Revoke Permissions |
+++
| mytable | {=rwmiriam=arwRgroup 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;
赋予用户 manuel 操作视图 kinds 的所有权限
GRANT ALL ON kinds TO manuel;
兼容性
SQL
SQL GRANT 语法允许对表中的某单独列/字段设置权限并且允许设置一权限以赋予别人相同权限.
GRANT privilege [ ]
ON object [ ( column [ ] ) ] [ ]
TO { PUBLIC | username [ ] } [ WITH GRANT OPTION ]
这些字段与 Postgres 实现是兼容的除了下面一些例外
privilege
SQL 允许声明附加的权限
SELECT
REFERENCES
允许在一个声明的表的整合约束中使用某些或全部列/字段.
USAGE
允许使用一个域字符集集合或事务.如果声明的对象不是表/视图 privilege 只能声明为 USAGE.
object
[ TABLE ] table
SQL 允许一个附加的非函数关键字 TABLE
CHARACTER SET
允许使用声明的字符集.
COLLATION
允许使用声明的集合序列.
TRANSLATION
允许使用声明的字符集转换.
DOMAIN
允许使用声明的域.
WITH GRANT OPTION
允许向别人赋予同样权