Могу ли я использовать .pgpass в логической репликации? - PullRequest
0 голосов
/ 08 мая 2018

Я использую логическую репликацию. Я сделал подписку, как показано ниже.

=# CREATE SUBSCRIPTION mysub CONNECTION 'host=xxx.xxx.xxx.xxx port=5432 
     user=postgres dbname=mydb password=<password>' PUBLICATION mypub;
NOTICE:  created replication slot "mysub" on publisher
CREATE SUBSCRIPTION

Но мне интересно, могу ли я использовать файл .pgpass для ввода пароля. Конечно, я попробовал это. Но это не удалось, как показано ниже.

=# CREATE SUBSCRIPTION mysub CONNECTION 'host=xxx.xxx.xxx.xxx port=5432 
    user=postgres dbname=mydb' PUBLICATION mypub;
ERROR:  could not connect to the publisher: fe_sendauth: no password supplied

[Мой .pgpass]

localhost:5432:postgres:postgres:<password>
localhost:5432:mydb:postgres:<password>
xxx.xxx.xxx.xxx:5432:mydb:postgres:<password>

Этот файл .pgpass хорошо работает для pgAgent.

Можно ли использовать файл .pgpass для логической репликации? или я должен написать свой пароль в заявлении CREATE? Если запись пароля в команде CREATE - единственный ответ, это безопасно?

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

[решено] Мне понравилось.

  • In .pgpass

    (IP of publisher):5432:mydb:postgres:(my password)
    
  • Сменил владельца, группу .pgpass на 'postgres'

    -rw-------.  1 postgres postgres  163  5월 18 06:06 .pgpass
    

(Когда владельцем и группой .pgpass был 'pgagent', происходило "fe_sendauth: пароль не указан".)

  • После входа в БД

    =# create subscription mysub connection 'host=(IP of publisher) port=5432 user=postgres dbname=mydb passfile=/var/lib/pgsql/.pgpass' publication mypub;
    

Хорошо работает ^^

0 голосов
/ 15 мая 2018

https://www.postgresql.org/docs/10/static/sql-createsubscription.html

CONNECTION 'conninfo' Строка подключения к издателю. За подробности см.

https://www.postgresql.org/docs/10/static/libpq-connect.html#LIBPQ-CONNSTRING

passfile

Указывает имя файла, используемого для хранения паролей (см. Раздел 33.15). По умолчанию ~ / .pgpass

Так что да - это должно работать. Давайте макет. Сначала я намеренно использую неверный пароль, чтобы увидеть, отражается ли это в ошибке:

t=# CREATE SUBSCRIPTION mysub CONNECTION 'host=localhost port=5433 passfile=/tmp/p user=vao dbname=t' PUBLICATION mypub;
ERROR:  could not connect to the publisher: fe_sendauth: no password supplied

нет, это не так, но проверка журналов делает:

-bash-4.2$ tail /pg/d10/log/postgresql-Tue.log | grep WARN | tail -n 1
WARNING: password file "/tmp/p" has group or world access; permissions should be u=rw (0600) or less

хорошо, попробуйте использовать значение по умолчанию:

t=# CREATE SUBSCRIPTION mysub CONNECTION 'host=localhost port=5433 user=vao dbname=t' PUBLICATION mypub;
ERROR:  could not connect to the publisher: fe_sendauth: no password supplied

и на этот раз даже без предупреждения! поэтому проверка chmod:

-bash-4.2$ ll ~/.pgpass
-r-------- 1 postgres postgres 1227 May 15 15:00 /home/vao/.pgpass

выглядит хорошо, но ага - нет строки для этого соединения, потому что ниже запрашивается пароль:

-bash-4.2$ psql -h localhost -p 5433 -U vao t
Password for user vao:

так:

echo '*:*:*:vao:blah' > ~/.pgpass
-bash-4.2$ psql -h localhost -p 5433 -U vao t
psql: FATAL:  password authentication failed for user "vao"
password retrieved from file "/var/lib/pgsql93/.pgpass"

ага - теперь он его использует, так что вернемся к SQL:

t=# CREATE SUBSCRIPTION mysub CONNECTION 'host=localhost port=5433 user=vao dbname=t' PUBLICATION mypub;
ERROR:  could not connect to the publisher: FATAL:  password authentication failed for user "vao"
password retrieved from file "/var/lib/pgsql93/.pgpass"

да, вы можете использовать как указанный, так и файл pgpassword по умолчанию для подписки с логической репликацией

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...