PG dblink 可以借用fdw 名字和密码直接访问

CREATE SERVER xxx

FOREIGN DATA WRAPPER postgres_fdw

在 PostgreSQL 中,如果使用 dblink 访问外部服务器(Server),绝对无法完全不配置用户和密码。因为目标远程数据库必须知道"你是谁"以及"凭证是什么"才能允许你访问。

但是,如果你想在执行 dblink SQL 时不需要显式地编写和管理个人的用户密码,有以下 3 种在数据库层面"隐藏"或"免除"密码配置的官方标准做法:

方法一:配置 PUBLIC 映射(最常用:一次配置,全员免密)

你可以为系统中的 PUBLIC 角色(即所有用户)统一配置一个全局的外部服务器映射。这样,任何本地用户直接调用 dblink('your_server') 时,都不需要再为自己配置密码。

sql

复制代码
-- 让所有本地用户共用同一个远程账号
CREATE USER MAPPING FOR PUBLIC 
SERVER your_server_name 
OPTIONS (user 'remote_user', password 'remote_password');

请谨慎使用此类代码。

  • 效果 :开发人员或普通角色在写 dblink 时,感知不到密码的存在,直接 SELECT * FROM dblink('your_server_name', '...') 即可。

方法二:使用互信认证(真正物理意义上的"无密码")

如果你的本地 PostgreSQL 服务器和远程数据库在同一个内网,且你拥有两台服务器的系统管理权限,可以通过修改 PostgreSQL 的 pg_hba.conf 配置文件来实现真正的无密码连接:

  1. 修改远程数据库的 pg_hba.conf :
    允许本地服务器的 IP 通过 trust(信任)或 peer 认证方式访问。

    text

    复制代码
    # 示例:允许来自本地服务器 IP 的连接无需密码
    host    all             all             192.168.1.10/32            trust

    请谨慎使用此类代码。

  2. 在本地数据库创建没有密码的 User Mapping :
    因为远程已经配置了信任,所以本地创建映射时只需要写用户名,不需要写密码 :

    sql

    复制代码
    CREATE USER MAPPING FOR dev 
    SERVER your_server_name 
    OPTIONS (user 'remote_user'); -- 这里不写 password 选项

    请谨慎使用此类代码。


方法三:利用连接字符串读取外部文件(如 .pgpass)

如果你不希望把密码保存在 pg_user_mapping 表中(防止被别的管理员看到),你可以让 PostgreSQL 进程去读取服务器操作系统中的密码文件:

  1. 在 PostgreSQL 数据库所属的系统用户(通常是 postgres)的家目录下创建 .pgpass 文件。

  2. 写入远程凭证:hostname:port:database:username:password。

  3. 在本地直接通过连接字符串调用 dblink,此时不需要创建任何 User Mapping :

    sql

    复制代码
    SELECT * FROM dblink('host=远程IP dbname=远程库名 user=远程用户名', 'SELECT ...') AS ...

    请谨慎使用此类代码。

    PostgreSQL 底层的 libpq 驱动会自动去 .pgpass 文件里匹配并抓取密码。

请问你是不希望在 SQL 代码里暴露密码 ,还是本地和远程是同一个数据库的两个不同 schema/不同库?

根据你的具体物理部署环境(是否在同一台机器或内网),我可以帮你推荐最安全且最省事的配置步骤。

相关推荐
2601_960356384 小时前
2027零售商品计划岗能力拆解:统计学、SQL、Excel与业务指标怎么结合
sql·excel·零售
好奇的菜鸟4 小时前
GORM 入门(二):从 database/sql 平滑过渡到 GORM
数据库·sql
这个DBA有点耶5 小时前
关系数据库管理系统选型指南:四步决策框架与主流产品技术路线对比
数据库·sql·程序人生·mysql·database·dba
jason.zeng@15022075 小时前
(七)「固化 Rest 接口 + Text-to-SQL 灵活查询」双模式 Agent 架构教程
数据库·python·sql·ai·架构·langchain·ai编程
2501_933670796 小时前
2027届数据类专业投用户增长岗:A/B实验、指标和SQL准备思路
数据库·sql
天空鸟_时光不老8 小时前
10-Agent安全隐患与SQL执行层加固
java·数据库·人工智能·sql·spring·maven·mybatis
2501_933670791 天前
2027届数学与应用数学转经营分析:SQL、财务指标与业务指标补齐路线
数据库·sql·数学建模
阳光九叶草LXGZXJ2 天前
达梦数据库-报错-15-列【XXX】长度超出定义
linux·运维·数据库·sql·学习
阳光九叶草LXGZXJ2 天前
达梦数据库-报错-16-MERGE INTO提示:无效的列名[XX]
linux·运维·数据库·sql·学习