【发布时间】: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 是的,我做到了
标签: postgresql spring-boot migration flyway