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
权限,但这需要谨慎操作。还建议服务器用户 belonging 的任何 ~/.pgpass
文件not 包含任何指定通配符主机名的记录。
有关更多详细信息,请参见 dblink_connect()
。