给予user2对PostgreSQL中schema1的访问权

guicsvcw  于 12个月前  发布在  PostgreSQL
关注(0)|答案(1)|浏览(81)

有一个包含多个模式(用户)的表。我想给予一个方案(用户)对另一个方案的访问权限。为此,用户可以访问另一个方案的表。
方案和用户1:ctl_r1
方案和用户2:check_b2

我希望user 2能够访问scheme 1

我在admin下打开控制台并运行脚本:

set role db_admin;

GRANT ALL ON schema ctl_r1 TO check_b2;
GRANT USAGE ON SCHEMA "ctl_r1" TO "check_b2";
GRANT SELECT, UPDATE, INSERT, DELETE ON ALL TABLES IN SCHEMA "ctl_r1" TO "check_b2";
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA "ctl_r1" TO "check_b2";
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA "ctl_r1" TO "check_b2";
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA "ctl_r1" TO "check_b2";
GRANT EXECUTE ON ALL ROUTINES IN SCHEMA "ctl_r1" TO "check_b2";
GRANT EXECUTE ON ALL PROCEDURES IN SCHEMA "ctl_r1" TO "check_b2";

alter role check_b2 set search_path = check_b2, ctl_r1;

在此之后,在管理控制台中,我运行命令:

select rolconfig
from pg_roles
where rolname = 'check_b2';

我在search_path中看到了两个方案:

rolconfig
-----------------------------
{search_path=check_b2,ctl_r1}

接下来,我打开user 2的控制台(check_b2)并检查命令:

show search_path;
search_path
-----------
check_b2
  • 由于某种原因,我在search_path中只看到1个模式。
    因此,当然,user 2看不到scheme 1的表。
    但是过了一段时间(大约10分钟),我又跑了起来:
show search_path;
search_path
----------------
check_b2, ctl_r1

现在我在答案中看到了两个模式。
现在user 2看到了scheme 1的表,并且可以访问它们。
然后,一段时间后,show search_path;再次只给出1个方案作为响应。
你能解释一下为什么会这样吗?还有我怎样才能给予user 2对scheme 1的一次性访问权呢?

46scxncf

46scxncf1#

您可以通过更改用户来永久添加路径。

ALTER ROLE username SET search_path TO "$user", public, test;

由于上一个命令仅在下次登录时生效,因此可以通过运行

SET search_path TO "$user", public, test;

相关问题