如何在Postgres中创建dblink连接而不提供用户名&密码(出于安全原因)?
运行以下查询将返回以下错误:
SELECT dblink_connect('conn_1','dbname=adatabase');
"could not establish connection 08001"
我的pgpass.conf文件有以下条目,我在pgAdmin中以postgres用户身份运行脚本:
localhost:5432:*:postgres:apassword
使用 dblink_connect_u 也会返回相同的错误。
我在Windows 2012 Server上运行Postgres 9.2
答案 0 :(得分:1)
服务器使用自己的pgpass文件,而不是“你的”文件,它是不可访问的。
请考虑dblink_connect_u
文档中的摘录:
此外,即使远程服务器确实需要密码,也可以 用于从服务器环境提供的密码,例如 〜/ .pgpass文件属于服务器的用户。
在unix中它将是~postgres/.pgpass
,在Windows中,您应该找到相应的位置,具体取决于运行服务器进程的操作系统用户(postgres
或系统帐户,具体取决于您的安装程序)。< / p>
如果操作系统用户没有主目录,或者将pgpass.conf
放在那里是不明智的,您可以通过PGPASSFILE
环境变量设置不同的位置。我不知道Windows管理员如何为特定服务设置环境变量。
答案 1 :(得分:1)
如果您要连接到PostgreSQL数据库,则可以在要连接的服务器上修改your pg_hba.conf,以便(例如)允许来自本地计算机的用户进行无密码连接:
local all youruser trust
host all youruser 127.0.0.1/32 trust
host all youruser ::1/128 trust
理想情况下,您可以在服务器上专门为dblink创建一个PostgreSQL用户,并且仅授予必要的权限(例如,仅在特定表上使用SELECT
。)