您找到了为给定架构中的所有现有表设置权限的简写。 The manual clarifies:
(但请注意,ALL TABLES 被认为包括视图和外部表)。
我的大胆强调。 serial 列在序列上使用nextval() 作为默认列实现,quoting the manual:
对于序列,此权限允许使用 currval 和 nextval 函数。
因此,如果有 serial 列,您还需要在 sequences
上授予
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 窗格中显示默认权限,即使它们不适用于当前角色。复制SQL脚本的时候一定要手动调整FOR ROLE子句。