【问题标题】:Grant permissions to user for any new tables created in postgresql为用户授予在 postgresql 中创建的任何新表的权限
【发布时间】:2013-10-19 00:27:09
【问题描述】:

目前我正在使用它来授予权限:

grant select on all tables in schema public to <user_name>;

alter default privileges in schema public grant select on tables to <user_name>;

根据documentation,第二条语句应该已经解决了问题。但是,当将新表添加到公共架构时,它不会自动授予 user_name 权限。

我正在使用此用户 (user_name) 将数据复制到另一个数据库。

【问题讨论】:

标签: postgresql grant database-permissions


【解决方案1】:

找到了答案。就在the ALTER DEFAULT PRIVILEGES documentation的这一行。

您只能更改将由您自己或您所属的角色创建的对象的默认权限。

我使用了不同于创建表的用户的更改默认权限。

确保在alter default privilege语句之前将角色设置为创建表的用户:

SET ROLE <user_that_creates_new_tables>;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO <user_name>;

【讨论】:

【解决方案2】:

要授予默认权限,您需要授予创建表的用户。

您将表创建为SA_user,但将表读取为READ_user。您的代码需要如下所示:

ALTER DEFAULT PRIVILEGES 
FOR USER SA_user
IN SCHEMA schema_name
GRANT SELECT ON TABLES TO READ_user;

因此,每当SA_user 创建表时,它都会授予READ_user 的选择权限。

【讨论】:

    【解决方案3】:

    我一直在寻找同样的东西,我找到了解决这个问题的其他方法。基于 postgresql 文档我们可以创建事件触发器,所以当创建新表时,授权查询将自动执行。因此,无论谁创建了新表,其他用户都允许使用它。

    CREATE OR REPLACE FUNCTION auto_grant_func()
    RETURNS event_trigger AS $$
    BEGIN
        grant all on all tables in schema public to <username>;
        grant all on all sequences in schema public to <username>;
        grant select on all tables in schema public to <username>;
        grant select on all sequences in schema public to <username>;
    END;
    $$ LANGUAGE plpgsql;
    
    CREATE EVENT TRIGGER auto_grant_trigger
        ON ddl_command_end
        WHEN TAG IN ('CREATE TABLE', 'CREATE TABLE AS')
    EXECUTE PROCEDURE auto_grant_func();
    

    【讨论】:

    • 没做过postgres,为什么没有执行功能?
    • @WhatsThePoint,对不起,我不明白,你能解释一下你的问题吗?
    • 在底部你已经执行了程序,为什么它不起作用?
    • @WhatsThePoint:@WhatsThePoint:EXECUTE PROCEDURE 在这种情况下是一种误导性的语法怪异,受模糊 SQL 标准的启发,最终在 Postgres 11 中得到修复。请参阅:dba.stackexchange.com/a/255319/3684
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-16
    • 2020-12-08
    • 1970-01-01
    • 2021-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多