你可以在 PostgreSQL 方面做很多事情:
如果你想role2
拥有所有的特权role1
,你可以:
GRANT role1 TO role2;
和/或,使用 PostgreSQL 9.0 或更高版本,您可以指示 PostgreSQL 为新对象设置默认权限:
ALTER DEFAULT PRIVILEGES 允许您设置将应用于将来创建的对象的权限。(它不影响分配给已存在对象的权限。)目前,只能更改表(包括视图和外部表)、序列和函数的权限。
您可以对角色或模式执行此操作。对于您的情况,您可以:
ALTER DEFAULT PRIVILEGES FOR ROLE role1 GRANT SELECT ON TABLES TO role2;
如果您希望多个不同的角色共享一组权限,我会将对象的所有权限授予一个非登录角色(曾经被称为GROUP
) -role0
在下面的示例中。使用DEFAULT PRIVILEGES
它并且不要忘记预先存在的对象,包括序列(我倾向于忘记那些)。
然后GRANT role0
是其他角色。
沿着这些思路:
ALTER DEFAULT PRIVILEGES FOR ROLE role1 GRANT SELECT ON TABLES TO role0;
ALTER DEFAULT PRIVILEGES FOR ROLE role2 GRANT SELECT ON TABLES TO role0;
...
GRANT role0 TO role1;
GRANT role0 TO role2;
这样GRANT
,如果需要,您可以轻松地将特权附加到一个角色。您可以在此设置中添加任意数量的角色。
许多DML 语句需要对象的所有权。我引用手册ALTER TABLE
:
您必须拥有该表才能使用 ALTER TABLE。
作为拥有表工作的角色的成员。因此,在上面的示例中,如果您制作role0
自己的表格,role1
并且role2
可以使用ALTER TABLE
. 执行:
ALTER TABLE tbl OWNER TO user0;
对于您创建的每个表。
CREATE
或者在运行命令之前进入角色:
SET ROLE user0;
CREATE ...;
CREATE ...;
RESET ROLE;
如果你忘记了你是谁:
SELECT current_user, session_user;