使用 PostgreSQL 9.0,我有一个名为“staff”的组角色,我想授予该角色对特定模式中的表的所有(或某些)特权。以下均无效
GRANT ALL ON SCHEMA foo TO staff;
GRANT ALL ON DATABASE mydb TO staff;
“员工”的成员仍然无法对模式“foo”中的单个表进行选择或更新,或者(在第二个命令的情况下)数据库中的任何表除非我授予该特定表上的所有权限。
我可以做些什么来让我和我的用户的生活更轻松?
更新:在 a similar question on serverfault.com 的帮助下解决了这个问题.
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA foo TO staff;
最佳答案
您找到了为给定模式中的所有现有 表设置权限的简写。 The manual clarifies :
(but note that
ALL TABLES
is considered to include views and foreign tables).
大胆强调我的。 serial
列是使用 nextval()
在序列上作为列默认值实现的,quoting the manual :
For sequences, this privilege allows the use of the
currval
andnextval
functions.
因此,如果有 serial
列,您还需要授予 USAGE
(或 ALL PRIVILEGES
) 在序列
GRANT USAGE ON ALL SEQUENCES IN SCHEMA foo TO mygrp;
备注:IDENTITY
columns在 Postgres 10 或更高版本中使用不需要额外权限的隐式序列。 (考虑升级 serial
列。)
新对象怎么样?
您还会对 DEFAULT PRIVILEGES
for users or schemas 感兴趣:
ALTER DEFAULT PRIVILEGES IN SCHEMA foo GRANT ALL PRIVILEGES ON TABLES TO staff;
ALTER DEFAULT PRIVILEGES IN SCHEMA foo GRANT USAGE ON SEQUENCES TO staff;
ALTER DEFAULT PRIVILEGES IN SCHEMA foo REVOKE ...;
这会自动为将来创建的对象设置权限 - 但不会为预先存在的对象设置权限。
默认权限仅应用于目标用户创建的对象(FOR ROLE my_creating_role
)。如果省略该子句,则默认为当前用户执行 ALTER DEFAULT PRIVILEGES
。明确地说:
ALTER DEFAULT PRIVILEGES FOR ROLE my_creating_role IN SCHEMA foo GRANT ...;
ALTER DEFAULT PRIVILEGES FOR ROLE my_creating_role IN SCHEMA foo REVOKE ...;
另请注意,所有版本的 pgAdmin III 都有一个微妙的错误,并且在 SQL Pane 中显示默认权限,即使它们不适用于当前角色。请务必在复制 SQL 脚本时手动调整 FOR ROLE
子句。
关于postgresql - 将数据库中特定架构上的所有内容授予 PostgreSQL 中的组角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10352695/