dblink_connect_u — 以不安全方式打开到远程数据库的持久连接
dblink_connect_u(text connstr) returns text dblink_connect_u(text connname, text connstr) returns text
dblink_connect_u() 与 dblink_connect() 相同,区别在于它允许非超级用户使用任何认证方法连接。
如果远程服务器选择了不涉及密码的认证方法,就可能发生身份冒充及后续的权限提升,因为该会话看起来源自本地 PostgreSQL 服务器运行所用的用户。此外,即使远程服务器确实要求密码,密码也可能来自服务器环境,例如属于该服务器用户的 ~/.pgpass 文件。这不仅带来身份冒充的风险,还可能把密码暴露给不可信的远程服务器。因此,dblink_connect_u() 初始安装时会撤销 PUBLIC 的所有特权,使它除超级用户外无法被调用。在某些情况下,向被认为可信的特定用户授予 dblink_connect_u() 的 EXECUTE 权限也许是合适的,但应谨慎行事。还建议属于服务器用户的任何 ~/.pgpass 文件不要包含指定通配符主机名的记录。
更多细节请参见 dblink_connect()。