首页 > 解决方案 > 将用户成员资格授予另一个角色并不会赋予其对其他角色拥有的对象的相同权限

问题描述

仅供参考,我正在使用 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 对其拥有的对象的所有权限吗?

标签: postgresql

解决方案


您可能希望选择使用ALTER ROLE来指定组成员身份(或包含IN ROLEIN 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)

推荐阅读