0

私のサーバーにはいくつかのデータベースがあります。db2 のクエリから db1 を読み取れるようにしたいと考えています。postgres_fdw を使用してそれを実行できることはわかっていますが、これにはいくつかの欠点があります。主なものは、資格情報を渡したり、パスワードを変更するときに心配したりする必要があることです。

4

1 に答える 1

2

したがって、サーバー、ユーザー マッピングを設定し、テーブルを作成します。

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 アドレスのパスワード認証を指定するレコードの前に表示されます。

于 2018-05-21T15:58:31.890 に答える