Postgres:为不同角色/用户创建的未来表授予对角色/用户的访问权限
Posted
技术标签:
【中文标题】Postgres:为不同角色/用户创建的未来表授予对角色/用户的访问权限【英文标题】:Postgres: granting access to a role/user for future tables created by a different role/user 【发布时间】:2020-02-01 18:38:53 【问题描述】:我正在构建一个 Spring Boot 应用程序。 Flyway 数据库迁移在应用程序启动时执行。
我决定使用两个不同的角色:role__app(read/write 对表的权限,app 架构中的序列)和 role__migration(应用程序/迁移架构中的高级权限)。
Flyway 迁移在 role__migration 下执行,因此它成为创建对象的所有者。我认为以下陈述会有所帮助:
ALTER DEFAULT PRIVILEGES IN SCHEMA app GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO role__app;
ALTER DEFAULT PRIVILEGES IN SCHEMA app GRANT USAGE ON SEQUENCES TO role__app;
但是当新表添加到 app 架构时,user__app(属于 role__app)无法访问表格。
是否可以通过 Postgres 或任何其他方式维持这样的流程(通过应用程序、迁移用户/角色)?
作为旁注,我应该提到我在目标数据库上运行以下语句:
REVOKE CREATE ON SCHEMA public FROM PUBLIC;
REVOKE ALL ON DATABASE myDb FROM PUBLIC;
更新 1
我添加了 FOR ROLE
子句,但我仍然收到用户 user__app 的应用架构中创建的表 (app.property) 的权限被拒绝消息.表的所有者是 user__mig。
更新 2
在 dbeaver 中以 postgres 用户身份登录后,我们可以看到 user__mig 已勾选所有必要的权限,而 user__app 对 app.property 表:
这里是重现问题的要点:https://gist.github.com/happygrizzly/849a6a791f028ba5b191f73180ae35d1
【问题讨论】:
您是否将架构应用的使用权限授予 role_app? @Jeremy 是的,我做到了 【参考方案1】:你应该写
ALTER DEFAULT PRIVILEGES FOR USER role__migration ...
如果您省略FOR USER
子句,则权限仅授予运行ALTER DEFAULT PRIVILEGES
的用户创建的对象。
通过上面的语句,当role__migration
创建一个对象时,权限被授予。这不会扩展到role__migration
角色的成员。
【讨论】:
一定要写FOR USER
,可以用FOR ROLE
代替吗?
最初我按照the article at amazon 中的示例进行操作。我已阅读您的编辑,现在了解有关直接 角色 及其权限的内容。代表团。我看到了使用多个用户的意义,因为它们代表不同的登录。关于迁移流程,我大概可以使用单一迁移登录(role__migration
+ WITH LOGIN
)。
很好。看起来问题已得到解答。以上是关于Postgres:为不同角色/用户创建的未来表授予对角色/用户的访问权限的主要内容,如果未能解决你的问题,请参考以下文章