如何在Postgres中为FDW创建用户映射并授予只读权限
解决FDW用户映射缺失的报错问题
你遇到的SQL Error [42704]: ERROR: user mapping not found for "username",本质是本地数据库用户username没有和FDW对应的外部服务器建立映射关系——FDW作为外部数据包装器,必须通过用户映射关联本地用户与外部数据源的认证信息,才能访问外部表。
1. 确认目标外部服务器
执行这条SQL查看当前数据库里的所有FDW外部服务器,找到和fdw模式绑定的服务器名称(记为foreign_server_name):
SELECT * FROM pg_foreign_server;
2. 创建用户映射
用CREATE USER MAPPING命令为username建立到外部服务器的映射,替换占位符为实际的外部数据源账号信息:
CREATE USER MAPPING FOR username SERVER foreign_server_name OPTIONS (user '外部数据源用户名', password '外部数据源密码');
- 如果外部数据源不需要密码认证,直接去掉
password选项即可。
3. 验证配置
完成映射后,尝试访问fdw模式下的表测试:
SELECT * FROM fdw.目标表名 LIMIT 1;
如果还是报错,排查这几点:
- 确认
readaccess角色已正确授予username,且GRANT USAGE、GRANT SELECT命令执行成功 - 外部数据源的账号必须拥有对应外部表的只读权限
- 操作的用户需要有
CREATE USER MAPPING的权限(一般是超级用户或外部服务器的所有者)
额外提示
如果后续fdw模式会新增表,为了让readaccess角色自动获得新表的只读权限,执行这条命令:
ALTER DEFAULT PRIVILEGES IN SCHEMA fdw GRANT SELECT ON TABLES TO readaccess;
内容的提问来源于stack exchange,提问作者Eizy
相关产品推荐
相关产品推荐

