Удаленный доступ к базе данных postgresql

46

Мне нужно получить доступ к базе данных postgresql с удаленной машины на VPS в DigitalOcean под управлением 12.10 и postgresql 9.1.

Как мне это сделать? Я заметил, что порт 5432 закрыт, как мне открыть это?

Øyvind
источник
1
Выполните шаги, упомянутые в javabypatel.blogspot.in/2015/07/… и измените номер порта, присутствующий в файле postgresql.conf. после изменения порта перезапустите сервер PostgreSQL.
Джаеш
URL, размещенный @Jayesh, добился цели. Следовал инструкциям и успешно подключил один из моих компьютеров для разработки к другому (от Windows с pgAdmin4 до Ubuntu 18.04 postgresql 10.9)
EAmez

Ответы:

79

Чтобы открыть порт 5432, отредактируйте /etc/postgresql/9.1/main/postgresql.confи измените

listen_addresses='localhost'

в

listen_addresses='*'

и перезапустите вашу СУБД

invoke-rc.d postgresql restart

теперь вы можете связаться с

$ psql -h hostname -U username -d database

если вы не можете аутентифицировать себя, вам нужно предоставить права доступа к базе данных.

Отредактируйте свой

/etc/postgresql/9.1/main/pg_hba.conf

и добавить

host all all all md5

(Это для широкого открытого доступа. Для более строгого контроля, обратитесь к документации pg_hba.conf и отрегулируйте ее в соответствии с вашими потребностями).

После этого вам также необходимо перезагрузить

invoke-rc.d postgresql reload

Мне не нужно упоминать, что это базовая конфигурация, теперь вы должны подумать об изменении вашего брандмауэра и повышении безопасности вашей СУБД.

Даниэль Верите
источник
4
В частности, вы должны включить SSL.
Крейг Рингер,
Окей, я попробовал это, но когда я пытаюсь подключиться с помощью pgAdmin с моего компьютера, я получаю «Сервер не слушает». Я добавил в iptables, и когда я запускаю iptables -L, следующее показывает: ПРИНЯТЬ tcp - где угодно и где угодно tcp dpt: postgresql При проверке IP и PORT на этом сайте ( yougetsignal.com/tools/open-ports ) он говорит порт закрыт
Ойвинд
2
сервер слушает? проверить сnetstat -nlt|grep :5432
1
Я хотел бы вставить строку хоста в более строгом виде:host <database> <user> <remote_client_IPaddress>/24 md5
GC5
Для Postgresql версии 9.5 вам может потребоваться перезагрузить сервер, прежде чем listen_addresses вступят в силу.
Heather92065
26

Это больше не работает, если это когда-либо было:

хост все все * md5

Правильные возможные строки для этого:

хост все все 0.0.0.0/0 md5 # диапазон ipv4

хост все все :: диапазон 0/0 md5 # ipv6

хост все все все md5 # все ip

Источник

Kethryweryn
источник
4
Это определенно сделало свое дело. Вышеуказанный ответ определенно не сработал.
Майк
Пожалуйста, @Mike Express, что правильно: host all all all md5будет работать нормально? Верно? есть проблемы с безопасностью?
Питер Краусс
@peterkrauss Да, хост все все у меня все md5 работало. Проблема безопасности? Конечно, но то, что я делал, было просто прекрасно. (Внутренняя сеть)
Майк
3

Для сообщения "сервер не слушает", что случилось со мной, я не стираю # в архиве postgresql.conf, я имею в виду:

# Listen_addresses = 'локальный'

чтобы:

listen_addresses = '*'

(Извините за мой английский).

mrlinux
источник
0

Ответ, получивший наибольшее количество голосов, имеет серьезные последствия для безопасности. Этот метод по умолчанию отключен по уважительным причинам.

Лучше использовать локальную переадресацию портов с ssh:

ssh -L local_port:localhost:foreign_port user@server

Начните переадресацию портов:

ssh -L 5432:localhost:5432 user@your-server.com
#or
ssh -L 5432:127.0.0.1:5432 user@your-server.com

(Измените локальные и внешние порты в соответствии с вашей конфигурацией).

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

psql -U db_user -p local_port -l
pLumo
источник