仅供参考,我正在使用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 ROLE
或IN 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