【问题标题】:Postgres: granting access to a role/user for future tables created by a different role/userPostgres:为不同角色/用户创建的未来表授予对角色/用户的访问权限
【发布时间】:2020-02-01 18:38:53
【问题描述】:

我正在构建一个 Spring Boot 应用程序。 Flyway 数据库迁移在应用程序启动时执行。

我决定使用两个不同的角色:role__appread/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__appapp.property 表:


这里是重现问题的要点:https://gist.github.com/happygrizzly/849a6a791f028ba5b191f73180ae35d1

【问题讨论】:

  • 您是否将架构应用的使用权限授予 role_app?
  • @Jeremy 是的,我做到了

标签: postgresql spring-boot migration flyway


【解决方案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)。
  • 很好。看起来问题已得到解答。
猜你喜欢
  • 2021-10-16
  • 2018-04-09
  • 1970-01-01
  • 1970-01-01
  • 2021-05-12
  • 2021-09-23
  • 1970-01-01
  • 2019-04-13
相关资源
最近更新 更多