postgresql - 将用户成员资格授予另一个角色并不会赋予其对其他角色拥有的对象的相同权限
问题描述
仅供参考,我正在使用 google cloud sql postgres(postgres 13),但我认为它不会修改默认行为。
我的理解是,如果我将用户成员资格分配给拥有该用户继承相同权限的对象的角色,但我没有看到这一点。
-- login an user1, create a new table and confirm I can query it
CREATE TABLE test01 (did integer);
SELECT * FROM test01;
-- assign user2 member to the user1 role
GRANT "user2" TO "user1";
-- login as user2 and try to query
SELECT * FROM test01;
-- get a permissions error
ERROR: permission denied for table test01
这是预期的行为吗?user1 不应该获得 user2 对其拥有的对象的所有权限吗?
解决方案
您可能希望选择使用ALTER ROLE
来指定组成员身份(或包含IN ROLE
或IN GROUP
在执行时CREATE ROLE
- 请注意,在 Postgres 中,角色/组是可互换的)。
这是一个例子:
-- Create user1
postgres=# create role user1 LOGIN;
CREATE ROLE
-- Use user1 to create table
postgres=# \c postgres user1;
You are now connected to database "postgres" as user "user1".
postgres=> CREATE TABLE test01 (did integer);
CREATE TABLE
postgres=> SELECT * FROM test01;
did
-----
(0 rows)
-- Create user2, belonging to the group/role user1
postgres=> \c postgres postgres
You are now connected to database "postgres" as user "postgres".
postgres=# create role user2 IN GROUP user1 LOGIN;
CREATE ROLE
-- Use user2 to select from the table
postgres=# \c postgres user2;
You are now connected to database "postgres" as user "user2".
postgres=> SELECT * FROM test01;
did
-----
(0 rows)
推荐阅读
- python - 创建数据框结构
- angularjs - SyncFusion Angular js在谷歌上没有找到“字典中找不到给定键”的解决方案
- java - 有没有一种正确的方法可以使用 JOOQ 为所有方言创建一个包含枚举的表?
- r - 为列表中的每个数据框传递不同的参数给函数
- mediawiki - 如何将自定义 javascript 添加到 cms mediawiki-1.34.0?
- javascript - 将转换添加到 onClick div
- html - HTML 文件未链接到 CSS 文件
- java - 我的 TableView 显示的是图片的地址而不是实际的图片
- php - php shell_exec() 跳过 python 脚本
- arduino - 如何在Arduino的while循环中使用按钮?