您找到了为给定模式中的所有existing个表设置权限的简写方法.The manual clarifies:
(但请注意,ALL TABLES
被认为包括views和foreign tables).
我的.101列以nextval()
列作为默认列,quoting the manual列:
对于序列,此权限允许使用currval
和nextval
函数.
因此,如果有serial
列,您还需要在sequences上授予101(或ALL PRIVILEGES
)
GRANT USAGE ON ALL SEQUENCES IN SCHEMA foo TO mygrp;
注意:identity columns在Postgres 10或更高版本中使用不需要额外特权的隐式序列.(考虑升级serial
列).
What about new objects?
你也会对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窗格中都有一个微妙的错误和display个默认权限,即使它们不适用于当前角色.复制SQL脚本时,请确保手动调整FOR ROLE
子句.