【问题标题】:PostgreSQL - ALTER DEFAULT PRIVILEDGES....SELECT ON TABLES... in all schemasPostgreSQL - ALTER DEFAULT PRIVILEDGES....SELECT ON TABLES... 在所有模式中
【发布时间】:2017-06-29 21:29:47
【问题描述】:

是否可以更改 PostgreSQL 角色的默认权限,这样该角色在任何架构中的任何表上都有 SELECT(现有或将来创建)

我有 3 个角色(app_rapp_rw 的成员app_rwc 的成员) 我正在尝试这个:

ALTER DEFAULT PRIVILEGES FOR ROLE app_rwc GRANT USAGE ON SCHEMAS TO app_r;
ALTER DEFAULT PRIVILEGES FOR ROLE app_rwc GRANT SELECT ON TABLES TO app_r; 

但它不起作用。

SELECT has_table_privilege('app_r', 'some_schema.some_table', 'SELECT')
-- false

有没有办法在 PG 中做到这一点,还是我必须使用 IN SCHEMA 并为 every 模式重复? (呃)

ALTER DEFAULT PRIVILEGES FOR ROLE app_r IN SCHEMA some_schema GRANT SELECT ON TABLES TO app_r;

附: 我确实尝试运行 ALTER DEFAULT before(以及 after 也只是为了测试)创建模式和表...

P.P.S 我的角色设置受到this answer 的启发,我在this answer 中看到不必显式指定架构

更新 #1 -这是我正在使用的确切角色设置:

CREATE ROLE app_rwc INHERIT CREATEDB CREATEROLE;
CREATE ROLE app_rw INHERIT;
CREATE ROLE app_r  INHERIT;

GRANT app_r TO app_rw;
GRANT app_rw TO app_rwc;

-- these must be performed *before* any objects are created
ALTER DEFAULT PRIVILEGES FOR ROLE app_rwc GRANT USAGE ON SCHEMAS TO app_r;
ALTER DEFAULT PRIVILEGES FOR ROLE app_rwc GRANT SELECT ON TABLES TO app_r; 
ALTER DEFAULT PRIVILEGES FOR ROLE app_rwc GRANT INSERT, UPDATE, DELETE ON TABLES TO app_rw;
ALTER DEFAULT PRIVILEGES FOR ROLE app_rwc REVOKE TRUNCATE ON TABLES TO app_rw;
ALTER DEFAULT PRIVILEGES FOR ROLE app_rwc GRANT SELECT, UPDATE ON SEQUENCES TO app_rw;

【问题讨论】:

    标签: postgresql permissions sql-grant


    【解决方案1】:

    是否可以更改 PostgreSQL 角色的默认权限,例如 该角色在任何模式中的任何表上都有 SELECT(现有的或创建的) 将来)

    从 9.6 版开始,没有。

    【讨论】:

    • 文档提到“可以全局设置权限(即,针对当前数据库中创建的所有对象),或仅针对在指定模式中创建的对象。”我的问题是创建数据库后,您必须先连接到它,然后才能设置默认权限。
    猜你喜欢
    • 2011-09-09
    • 2021-09-30
    • 2017-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-12
    相关资源
    最近更新 更多