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/不同库?

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

相关推荐
Decay__15 小时前
04_MySQL DBA 日常运维手册 —— 会话管理、锁与阻塞、事务监控、慢查询与日志巡检
运维·数据库·sql·mysql·架构
吃一碗粉只付一碗钱20 小时前
10-令牌里的用户主键不要明文
服务器·数据库·sql·sqlserver·c#
sun032221 小时前
【JDK 动态代理】 和 【CGLIB 代理】对比
java·数据库·sql
l1t1 天前
DeepSeek总结的AI 智能体应该用哪种语言搜索其记忆:SQL 还是 SPARQL?
数据库·人工智能·sql
geovindu1 天前
SQL Data Sampling and Approximation Techniques using postgreSQL 18
大数据·数据库·数据仓库·sql·postgresql·数据库开发·数据库架构
l1t1 天前
DeepSeek总结的从 SQL 桥梁到智能体基础设施:Hex 的 DuckDB 实践
数据库·sql·duckdb
正儿八经的少年1 天前
MyBatis 一对一、一对多 SQL
数据库·sql·mybatis
Decay__1 天前
03_MySQL 存储引擎与存储管理 —— InnoDB 深入、表空间/ibd、binlog/redo/undo 与双写缓冲
运维·数据库·sql·mysql·架构
川石课堂软件测试1 天前
学习软件测试需掌握的一些知识
数据库·python·sql·功能测试·网络协议·mysql·http