【问题标题】:Is there a way to grant permissions on tables that don't exist yet (or that get recreated)?有没有办法授予对尚不存在(或重新创建)的表的权限?
【发布时间】:2019-10-30 15:29:48
【问题描述】:

我有一个设置了只读角色的数据库;我们称它为“app_user_ro”。我正在使用第三方数据加载工具(以“app_user”身份运行)删除并重新创建表。重新创建表后,以前的权限消失了,“app_user_ro”无法再从表中进行选择。

我正在使用在 Ubuntu 19.04 上运行的 Postgres 11.3。我查看了Grant privileges on future tables in PostgreSQL? 并尝试更改默认权限,但在删除并重新创建表后,“app_user_ro”仍然无法从表中读取数据。

我试过了:

-- The accepted answer
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO app_user_ro;

-- An alternative answer from the comments:
ALTER DEFAULT PRIVILEGES FOR USER app_user_ro IN SCHEMA public GRANT SELECT ON TABLES TO app_user_ro;

唯一可行的方法是在每次导入后手动授予权限:

GRANT SELECT ON ALL TABLES IN SCHEMA public TO app_user_ro;

docs 状态:

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

我的角色是:

app_data_loader=# \du
                                      List of roles
   Role name    |                         Attributes                         | Member of  
----------------+------------------------------------------------------------+------------
 app_user       |                                                            | {postgres}
 app_user_ro    |                                                            | {}
 pg             | Superuser                                                  | {}
 postgres       | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

最初我将ALTER DEFAULT... 命令作为“postgres”角色运行,但最近我将“app_user_ro”角色添加到“app_user”角色(加载数据的角色)并尝试将其作为“app_user”运行行为不变的角色。

现在我只是安排一个工作在每次导入后授予权限,但似乎应该有更好的方法!

【问题讨论】:

    标签: sql database postgresql


    【解决方案1】:

    您缺少的拼图是ALTER DEFAULT PRIVILEGES 仅影响由FOR USER/ROLE 子句中指定的角色创建的表(或者,如果您省略了,则由运行的用户创建声明)。

    因此,如果是 app_user 创建表,则必须运行

    ALTER DEFAULT PRIVILEGES FOR ROLE app_user ...;
    

    【讨论】:

    • 有时我以postgres 登录,有时以app_user 登录。如果我碰巧以app_user 运行未修改的命令,它会起作用,但我不会真正理解为什么。感谢您的明确解释!
    猜你喜欢
    • 1970-01-01
    • 2017-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 2018-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多