我在Postgres 9.2中创建了两个组角色:admins
和readers
。
想法很简单:admins
创建表,而readers
能够读取这些表。
在将权限授予这两个组角色后,现有对象的所有内容都按预期工作。但是对于新对象呢?
因此,在阅读了这篇文章之后,我更改了默认权限,以授予readers
对admins
创建的任何新表的SELECT
权限:
ALTER DEFAULT PRIVILEGES FOR ROLE admins IN SCHEMA public GRANT SELECT ON TABLES TO readers;
ALTER DEFAULT PRIVILEGES FOR ROLE admins IN SCHEMA public GRANT SELECT ON SEQUENCES TO readers;
但是显然,ALTER DEFAULT PRIVILEGES
只会影响角色本身,而不会影响角色的成员。让我给你演示一下。
如果我以 userX
(一个admins
的成员)的身份登录并创建一个新表,则不会授予任何默认权限(因此,readers
无法访问此表):
test=# CREATE TABLE table1 (name VARCHAR(10)); -- Creating table as userX
test=# \dp table1
Access privileges
Schema | Name | Type | Access privileges | Column access privileges
--------+--------+-------+-------------------+--------------------------
public | table1 | table | |
但是,如果我将表格创建为管理员
(读者
可以访问此表),则会授予默认权限:
test=# SET ROLE admins;
test=# CREATE TABLE table2 (name VARCHAR(10)); -- Creating table as admins
test=# \dp table2
Access privileges
Schema | Name | Type | Access privileges | Column access privileges
--------+--------+-------+-----------------------+--------------------------
public | table2 | table | readers=r/admins +|
| | | admins=arwdDxt/admins |
有没有一种方法可以改变一个组角色的所有成员的默认权限?或者我应该为每个用户更改默认权限?
更新:在这个PostgreSQL论坛中,有人问了一个非常类似的问题,答案是:
不幸的是,我看不到任何实现您想要的目标的方法,除非将默认权限授予涉及到的每个人。
然而,这个问题是两年前提出的。现在有解决办法吗?