dblink_connect_u — 不安全地打开一个到远程数据库的持久连接
dblink_connect_u(text connstr) 返回 text dblink_connect_u(text connname, text connstr) 返回 text
dblink_connect_u()
和dblink_connect()
一样,不过它将允许非超级用户使用任意认证方式来连接。
如果远程服务器选择了一种不涉及口令的认证方式,那么可能发生模仿以及后续的扩大权限,因为该会话看起来像由运行PostgreSQL的用户发起的。此外,即使远程服务器不要求一个口令,也可能从服务器环境提供该口令,例如一个属于服务器用户的~/.pgpass
文件。这带来的不只是模仿的风险,而且还有将口令暴露给不可信的远程服务器的风险。因此,dblink_connect_u()
最初是用所有从PUBLIC
撤销的特权安装的,这让它只能被超级用户调用。在某些情况中,为dblink_connect_u()
授予EXECUTE
权限给可信的指定用户是合适的,但是必须小心。我们也推荐任何属于服务器用户的~/.pgpass
文件不能包含任何指定了一个通配符主机名的记录。
详见dblink_connect()
。