在创建用户映射中依赖 .pgpass

sha*_*unc 5 postgresql foreign-data postgresql-9.4

我正在尝试创建一个脚本,该脚本在两个 postgres 9.4 数据库之间创建 postgres-fdw 连接。该脚本(在版本控制下签入)一直依靠 pgpass 来做其他事情。我可以使用任何选项来请求在 pgpass 中查找密码吗?...一般来说,关于哪些选项可用的文档在哪里CREATE USER MAPPING?该参考只是说,选项取决于在服务器上。

小智 7

它可能无法完全回答您的问题,但是:

如果你指定一个用户映射superuserpostgres_fdw可以不使用密码进行指定。然后它将依赖于.pgpass来自服务器的 。

但是,通过对 a 使用映射,superuser您需要考虑这对您的使用会带来哪些安全问题。

数据源:

  • 数据库名称=销售
  • 主机=sales.db
  • 用户=sales_reader

自己的数据库:

  • 数据库名称=dwh
  • 主机=dwh.db
  • 用户=dwh_writer
  • ~/.pgpasspostgresOS用户包括: sales.db:*:sales:sales_reader:verysecret

示例会话示出之间的差NOSUPERUSERSUPERUSER

CREATE SERVER sales FOREIGN DATA WRAPPER postgres_fdw
    OPTIONS (host 'sales.db', dbname 'sales');
GRANT USAGE ON FOREIGN SERVER sales TO dwh_writer;
CREATE USER MAPPING FOR dwh_writer SERVER sales OPTIONS (user 'sales_reader');
CREATE USER MAPPING FOR postgres   SERVER sales OPTIONS (user 'sales_reader');

CREATE FOREIGN TABLE sales_summary (
    item_id text,
    amount bigint,
    date_sold date
)
SERVER sales
OPTIONS (schema_name 'sales_data', table_name 'sales_summary');

GRANT SELECT ON sales_summary TO dwh_writer;

\c dwh dwh_writer

dwh_writer@dwh=> SELECT count(*) FROM sales_summary;
ERROR:  password is required
DETAIL:  Non-superusers must provide a password in the user mapping.

\c dwh postgres

postgres@dwh=# SELECT count(*) FROM sales_summary;
 count
-------
     2
(1 row)
Run Code Online (Sandbox Code Playgroud)