【发布时间】:2021-11-12 12:59:38
【问题描述】:
在我们试图不让任何个人员工用户拥有任何东西的环境中,我是一名偶然的 DBA。 (这样我们就可以在需要时在员工的访问权限上 DROP ROLE,而无需先研究/重新定位大量对象。)
我们也在努力确保我们可以尽可能地自动化与新创建的对象相关的访问权限。
员工拥有对 CREATE 对象的访问权限,因为他们拥有所有权角色,该角色对允许他们访问的架构具有 CREATE 权限。如果员工需要创建新对象,则 S.O.P.是在执行 CREATE 事务之前将 ROLE 设置为所有权角色,因为所有权角色设置了 DEFAULT PRIVILEGES 语句,以确保他们创建的新对象对需要不同访问级别的不同员工组具有正确的权限。
如果员工不遵守 S.O.P.并且忘记事先设置角色,他们的角色有权创建对象(因为他们是拥有角色的成员)但在他们还记得授予它们之前它不会拥有正确的权限。
解决方案似乎是为每个用户编写 DEFAULT PRIVILEGES 语句,以反映为拥有角色设置的那些。但是,我们发现即使这些默认权限是为用户角色创建的对象编写的,而在第二个管理角色中,权限本身仍然由第一个角色拥有。这违反了我们试图建立的设计。
我认为我们遇到了 Postgres 架构的基本现实;似乎我们不能同时允许员工可以(无意地)在他们自己的角色下创建对象并允许这些对象具有默认权限的系统,除非我们愿意允许这些角色拥有默认权限。
对吗?我们是不是想把蛋糕也吃掉?
更多上下文:
我的团队中没有人可以访问数据库的超级用户权限;必须向 IT 请求超级用户下的任何内容。 (所以我们试图避免使用需要超级用户权限的系统。)
【问题讨论】:
标签: postgresql