向另一个角色授予用户成员资格不会赋予它对其他角色拥有的对象的相同权限



仅供参考,我正在使用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来指定组成员(或者在执行CREATE ROLE时包含IN ROLEIN GROUP-注意在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)

这是非常愚蠢的,也许我应该删除这个帖子,但是已经有人试图回答这个问题,也许这对其他用户有帮助。

我把grant语句写反了。

GRANT "user1" TO "user2";

GRANT "user2" TO "user1";

我想是语言把我弄糊涂了。我考虑的是给角色X权限给角色Y但是你给角色Y权限给角色X

相关内容

  • 没有找到相关文章