历史版本。 PostgreSQL 10 已结束支持。 2022-11-10. 请参阅 当前版本手册.
dblink_connect_u
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()。