繁体   English   中英

DEFAULT PRIVILEGES 语句是否可能由另一个非超级用户角色所有?

[英]Is it possible for DEFAULT PRIVILEGES statements to be owned by another non-superuser role?

我是一个偶然的 DBA,在我们试图不让任何个人员工用户拥有任何东西的环境中。 (这样我们就可以在需要时对员工的访问权限 DROP ROLE,而无需先研究/重新归位大量对象。)

我们还试图确保我们可以尽可能自动化与新创建的对象相关的访问权限。

员工可以访问 CREATE 对象,因为他们处于所有权角色中,该角色对他们被允许的模式具有 CREATE 权限。 如果一个员工需要创建一个新对象,SOP是在执行CREATE事务之前给所有权角色SET ROLE,因为所有权角色设置了DEFAULT PRIVILEGES语句,以确保他们创建的新对象对不同的组拥有正确的权限需要不同级别访问权限的员工。

如果员工不遵守 SOP 并忘记事先设置角色,他们的角色有权创建对象(因为他们是拥有角色的成员),但除非他们还记得授予他们,否则它不会拥有正确的权限.

解决方案似乎是为每个用户编写 DEFAULT PRIVILEGES 语句,以反映为拥有角色设置的那些语句。 但是,我们发现,即使这些 DEFAULT PRIVILEGES 是为用户角色在第二个管理角色中创建的对象编写的,这些权限本身仍然归第一个角色所有。 这违反了我们试图建立的设计。

我认为我们已经遇到了 Postgres 架构的一个基本现实; 似乎我们不能同时允许员工可​​以(无意)在他们自己的角色下创建对象允许这些对象具有默认权限的系统,除非我们愿意允许这些角色拥有默认权限。

那正确吗? 我们是否想拥有我们的蛋糕并也吃它?


对于其他上下文:

我的团队中没有人有权访问数据库的超级用户权限; 必须从 IT 请求超级用户下的任何内容。 (所以我们试图避免需要超级用户权限的系统。)

一种解决方案是定义这样的角色:

-- role that can create tables
CREATE ROLE table_owner NOLOGIN;
-- because it has the permission on the schema
GRANT CREATE ON SCHEMA myschema TO table_owner;

-- role that can do INSERT, SELECT, UPDATE, DELETE
CREATE ROLE dml_role NOLOGIN;
-- give it permissions
GRANT INSERT, SELECT, UPDATE, DELETE
   ON ALL TABLES IN SCHEMA myschema TO dml_role;
-- also for future tables
ALTER DEFAULT PRIVILEGES FOR table_owner IN SCHEMA myschema
   GRANT INSERT, SELECT, UPDATE, DELETE ON TABLES TO dml_role;

-- intermediary role that does *not* inherit privileges
CREATE ROLE break_inherit NOLOGIN NOINHERIT IN ROLE table_owner;

-- end user
CREATE ROLE enduser LOGIN IN ROLE dml_role, break_inherit;

现在enduser无法直接在myschema创建表,因为它不继承自该角色。 所以enduser只能先创建一张它的表SET ROLE table_owner

但是enduser自动拥有使用myschema中属于table_owner的表的权限,因为它继承自dml_role

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM