jul*_*ria 20 postgresql privileges roles postgresql-9.2
我在Postgres 9.2中创建了两个组角色:一个被调用admins,另一个被调用readers.
这个想法很简单:admins创建表并readers具有对这些表的读访问权.
在为两个组角色授予权限后,所有内容都按预期为exisintg对象工作.但是现在新物体怎么样?
所以在阅读这篇文章之后,我改变了默认SELECT权限,readers为任何admins创建的新表授予权限:
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;
Run Code Online (Sandbox Code Playgroud)
但显然,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 | |
Run Code Online (Sandbox Code Playgroud)
但是,如果我创建表(可以访问此表),则授予默认权限:adminsreaders
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 |
Run Code Online (Sandbox Code Playgroud)
有没有办法改变组角色的所有成员的默认权限?或者我应该只更改每个用户的默认权限?
更新: 在这个PostgreSQL论坛中,有人问了一个非常相似的问题,答案是:
不幸的是,如果不向所有相关人员授予默认权限,我无法找到实现目标的方法.
然而这个问题在2年前被问到过.现在有解决方案吗?
Pat*_*ick 16
如果用户创建表,则该用户将成为表的所有者.因此,在您的情况下,userX的任何默认权限都适用,而不是管理员的默认权限.解决方案是SET ROLE admins在创建表之前:
SET ROLE admins;
CREATE TABLE ... -- This now applies default privileges of admins
;
RESET ROLE;
Run Code Online (Sandbox Code Playgroud)
更一般地说,您可能希望始终这样做:通过组角色或日常操作中未使用的其他角色创建所有表和视图,并将关系授予对另一个组角色的访问权限,该角色的权限由常规登录角色(用户)继承).这极大地促进了安全管理.
干杯,帕特里克
| 归档时间: |
|
| 查看次数: |
5710 次 |
| 最近记录: |