您找到了为给定模式中的所有现有表设置权限的简写。该手册阐明:
(但请注意,这ALL TABLES
被认为包括视图和外部表)。
大胆强调我的。serial
列nextval()
在序列上作为默认列实现,并引用手册:
对于序列,此权限允许使用currval
andnextval
函数。
因此,如果有serial
列,您还需要在序列USAGE
上授予(或ALL PRIVILEGES
)
GRANT USAGE ON ALL SEQUENCES IN SCHEMA foo TO mygrp;
注意: Postgres 10 或更高版本中的标识列使用不需要额外权限的隐式序列。(考虑升级serial
列。)
新对象呢?
您还将DEFAULT PRIVILEGES
对用户或模式感兴趣:
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 窗格中显示默认权限,即使它们不适用于当前角色。FOR ROLE
复制 SQL 脚本时,请务必手动调整子句。