在 Postgres 9.6 中创建外部数据包装器时,如果我使用以下内容:
CREATE SERVER foreign_server
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (host 'localhost', dbname 'database', port '5432');
-- permissions
ALTER SERVER foreign_server OWNER TO data_owner;
-- Allow a user to access the foreign server if required
GRANT USAGE ON FOREIGN SERVER foreign_server to data_owner;
-- 4. Create foreign user mapping - using md5 encrypted password
CREATE USER MAPPING FOR data_owner SERVER foreign_server
OPTIONS ( USER 'jeff', PASSWORD 'md5de0366066f8d96ac5bb4872b1d77b0cb!');
-- 5. Create foreign table
IMPORT FOREIGN SCHEMA foo EXCEPT
(bar )
FROM SERVER foreign_server INTO foreign_tables_schema;
为什么会出现错误,当我使用明文密码时一切正常,但是当我使用加密的 md5 密码时,我无法导入外部表。
有什么想法吗?
你能告诉我们你是从哪里得到这个应该有效的想法的吗?
没有规定将密码作为 md5 散列提供给
postgres_fdw
. 也许应该有,但必须有人实施它才能存在。!
您的 md5 密码末尾似乎有一个额外的。您应该删除它,因为它不能成为密码的一部分。你是如何计算密码的?您是否记得在应用 MD5 哈希算法之前连接用户名和密码?整个密码字符串应为“md5”+ 32 个十六进制字符。
更新
我认为 @jjanes 更正确:因为服务器需要密码才能连接到远程实例,所以它必须清楚地知道(可以在可逆加密方案中工作,但肯定不是 MD5)才能使用和呈现它到远程数据库。所以那里没有 MD5 散列密码。我发现唯一相关的是:http ://www.postgresql-archive.org/BUG-8291-postgres-fdw-does-not-re-read-USER-MAPING-after-change-td5763260.html