【发布时间】: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