您找到了为所有人设置权限的简写existing给定模式中的表。手册明确了:
(但请注意ALL TABLES
被认为包括views and 外国表).
大胆强调我的。serial
列的实现是nextval()
在作为列默认值的序列上,引用手册:
对于序列,此权限允许使用currval
and nextval
功能。
所以如果有serial
列,您还需要授予USAGE
(or ALL PRIVILEGES
) on 序列
GRANT USAGE ON ALL SEQUENCES IN SCHEMA foo TO mygrp;
Note: IDENTITY columns在 Postgres 10 或更高版本中使用不需要额外权限的隐式序列。 (考虑升级serial
列。)
关于什么new物体?
您也会感兴趣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 ...;
这会自动为将来创建的对象设置权限,但不会为预先存在的对象设置权限。
默认权限是only应用于目标用户创建的对象(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 的所有版本都有一个微妙的错误,并且displaySQL 窗格中的默认权限,即使它们不适用于当前角色。请务必调整FOR ROLE
复制 SQL 脚本时手动添加子句。