最近我设置了 Forward Data Wrapper。这是我所做的:
CREATE SERVER foreign_server FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host '192.168.125.1', port '5432', dbname 'template1 ');
IMPORT FOREIGN SCHEMA public LIMIT TO (tbl_test) FROM SERVER foreign_server INTO public;
在目标/外部服务器上创建用户:CREATE USER fdwuser WITH PASSWORD 'secret'
然后进行必要的设置,例如GRANT
。FDW 工作。
但后来我想做更多。如果我将所有想要访问 FDW 的用户集合到一个GROUP
. 然后我执行以下操作:
Create group role
: 泄气1create user
: fdwuser3grant demorole1 to fdwuser3
为组角色“demorole1”创建用户映射:
为 demorole1 SERVER foreign_server OPTIONS 创建用户映射(用户“fdwuser”,密码“secret”);
select * from tbl_test;
——失败。授予 demorole1 对 tbl_test、模式和外部服务器的访问权限:
GRANT ALL ON TABLE tbl_test TO demorole1;
GRANT USAGE ON FOREIGN SERVER foreign_server TO demorole1;
GRANT USAGE ON SCHEMA public TO fdwuser3;
测试:
select * from tbl_test;
-失败。未找到用户 fdwuser3 的用户映射CREATE USER MAPPING FOR demorole1 SERVER foreign_server OPTIONS (user 'fdwuser', password 'secret');
再次测试:
select * from tbl_test;
- 仍然失败。找不到“fdwuser3”的用户映射做用户映射:
CREATE USER MAPPING FOR fdwuser3 SERVER foreign_server OPTIONS (user 'fdwuser', password 'secret');
select * from tbl_test;
--作品
问题:如何创建一个组角色,以便可以将本地服务器上的用户设置为其成员,这样我就不必在每次有用户想要访问 FDW 表时都进行授予和创建用户映射?
谢谢
这是不支持的。您可以为用户本身创建用户映射
PUBLIC
,也可以为每个人创建用户映射。这些是你的选择。为角色创建的用户映射不会用于该角色的成员。这是按设计工作的。