首页 > 解决方案 > PostgreSQL 默认权限不适用于其他用户

问题描述

我是 RDBMS 领域的初学者,并开始使用 PgAdmin 4 使用 PostgreSQL。我的任务是为我的团队管理数据库并开始学习权限。

我偶然发现了模式的默认权限属性。我知道这里定义的权限适用于在模式中创建的任何对象。我已经为团队数据库的管理员(我目前是其唯一成员)创建了一个组角色,以防我将来更改角色或其他任何内容。这样,如果我应该离开,就可以将新用户添加到此管理员组,而无需手动将其添加到每个单独对象的权限。所有权限(包括 GRANT)已作为默认表权限应用到此管理员组的所有模式。

但是,我发现当其他具有 CREATE 权限的用户向模式添加新表时,不会应用默认权限。即使作为架构的所有者,我也无法查看或访问我的队友正在创建的表的任何属性。我不得不要求超级用户帐户手动添加我才能修复这些表的权限。

我的问题是:为什么我定义的默认权限没有应用于为其他用户创建的对象。有没有办法确保所有用户都遵守相同的默认权限集?

这是我一直在使用的 SQL 语句:

GRANT ALL ON SCHEMA "schema_name" TO "user_1"

GRANT ALL ON SCHEMA "schema_name" TO "user_1"

ALTER DEFAULT PRIVILEGES IN SCHEMA "schema_name"
GRANT ALL ON TABLES TO "admin_me" WITH GRANT OPTION;

ALTER DEFAULT PRIVILEGES IN SCHEMA "schema_name"
GRANT SELECT ON TABLES TO "user_1";

ALTER DEFAULT PRIVILEGES IN SCHEMA "schema_name"
GRANT SELECT ON TABLES TO "user_2";

我所在admin_me的组在哪里,并且user_1user_2属于 admin_me 组。

谢谢!

标签: sqlpostgresqlprivileges

解决方案


这里有一个基本的误解:模式上的权限不会决定或影响该模式中表的权限或所有权。

如果用户 A 是组的成员admin,并且该组CREATE对架构具有特权,则用户 A 可以在该架构中创建表。但是该表将属于 A,而不是admin

现在只有表的所有者或超级用户才能对它ALTERDROP表的GRANT权限。这就是为什么admin该组中的其他用户无法更改对表的权限。

如果您只需要更改权限,您可以以用户 A 的身份运行以下命令:

GRANT ALL ON TABLE newtab TO admin WITH GRANT OPTION;

然后任何成员都admin可以管理该表的权限。没有这样的选择来委派ALTER TABLE或委托DROP TABLE给他人。


推荐阅读