sql - 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_1
不user_2
属于 admin_me 组。
谢谢!
解决方案
这里有一个基本的误解:模式上的权限不会决定或影响该模式中表的权限或所有权。
如果用户 A 是组的成员admin
,并且该组CREATE
对架构具有特权,则用户 A 可以在该架构中创建表。但是该表将属于 A,而不是admin
。
现在只有表的所有者或超级用户才能对它ALTER
或DROP
表的GRANT
权限。这就是为什么admin
该组中的其他用户无法更改对表的权限。
如果您只需要更改权限,您可以以用户 A 的身份运行以下命令:
GRANT ALL ON TABLE newtab TO admin WITH GRANT OPTION;
然后任何成员都admin
可以管理该表的权限。没有这样的选择来委派ALTER TABLE
或委托DROP TABLE
给他人。
推荐阅读
- excel - 如果 Range 包含值 > 8 的单元格,则 MsgBox
- asp.net-mvc - 如何从 IQueryable OData 获取生成的 sql 查询
- javascript - Promise 2 在 Promise 1 之前解决
- hibernate - 使用 Hibernate 成功连接到 Oracle 需要 3 分钟
- c# - 如何制作高效的控制台更新程序
- angular - 未捕获(承诺):TypeError:无法读取 angular2+ 中未定义的属性“get”
- jquery - 使用 jquery append 时单选按钮不起作用
- postgresql - 带有 docker 的 Jenkins 管道:以特定用户身份运行 docker(嵌入式 postgresql
- google-apps-script - 编辑谷歌文档表单提交?
- sas - SAS:暗淡和宏变量