私のサーバーにはいくつかのデータベースがあります。db2 のクエリから db1 を読み取れるようにしたいと考えています。postgres_fdw を使用してそれを実行できることはわかっていますが、これにはいくつかの欠点があります。主なものは、資格情報を渡したり、パスワードを変更するときに心配したりする必要があることです。
1 に答える
したがって、サーバー、ユーザー マッピングを設定し、テーブルを作成します。
t=# create server l foreign data wrapper postgres_fdw options (host 'localhost', dbname 't');
CREATE SERVER
t=# create user mapping FOR postgres SERVER l;
CREATE USER MAPPING
t=# create table lt(i serial);
CREATE TABLE
t=# insert into lt default values;
INSERT 0 1
t=# create foreign table ft (i int) server l options(table_name 'lt') ;
CREATE FOREIGN TABLE
t=# select * from ft;
i
---
1
(1 row)
ローカルのデフォルト接続を信頼する前に md5 を hba に追加すると、次のようになります。
t=# select * from ft;
ERROR: could not connect to server "l"
DETAIL: fe_sendauth: no password supplied
そして元に戻します:
t=# \! sed -i '43s/host/#host/' /pg/d10/pg_hba.conf
t=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
t=# select * from ft;
i
---
1
(1 row)
行は次のとおりです。
t=# \! sed '43,43!d' /pg/d10/pg_hba.conf
#host all postgres 127.0.0.1/32 md5
つまり、私のポイントは次のとおりです。ローカルデータベースがある場合、ローカルホストのピアまたは信頼があるため、デフォルトでパスワードを操作する必要はありません...
一部のユーザーのパスワードなしでlocalhost で作業するには、次のような行が必要です。
host fdw_db postgres 127.0.0.1/32 trust
次のように行の前に移動します。
host all all 127.0.0.1/32 md5
または接続を制限または拒否するその他の回線
https://www.postgresql.org/docs/current/static/auth-pg-hba-conf.html
接続試行ごとに pg_hba.conf レコードが順番に検査されるため、レコードの順序は重要です。通常、以前のレコードは厳密な接続一致パラメーターと弱い認証方法を使用しますが、後のレコードはより緩い一致パラメーターと強力な認証方法を使用します。たとえば、ローカル TCP/IP 接続にはトラスト認証を使用したいが、リモート TCP/IP 接続にはパスワードが必要な場合があります。この場合、127.0.0.1 からの接続の信頼認証を指定するレコードは、許可されたより広い範囲のクライアント IP アドレスのパスワード認証を指定するレコードの前に表示されます。