Не удается подключить PostgreSQL к удаленной базе данных с помощью pgAdmin
-
18-09-2019 - |
Вопрос
Я установил PostgreSQL на свой локальный сервер (Ubuntu) с IP 192.168.1.10.Теперь я пытаюсь получить доступ к базе данных со своего клиентского компьютера (Ubuntu) с IP 192.168.1.11 с помощью pgAdmin.
Я знаю, что мне нужно внести изменения в postgresql.conf и pg_hba.conf, чтобы разрешить клиенту подключаться.Не могли бы вы, пожалуйста, направить меня?
Решение
На самом деле это трехэтапный процесс удаленного подключения к серверу PostgreSQL через pgAdmin3.
Примечание:Я использую Ubuntu 11.04 и PostgreSQL 8.4.
Вам необходимо настроить PostgreSQL на прослушивание удаленных входящих TCP-соединений, поскольку настройки по умолчанию позволяют прослушивать только соединения через интерфейс обратной связи.Чтобы иметь возможность удаленного доступа к серверу, вам необходимо добавить в файл следующую строку:
/etc/postgresql/8.4/main/postgresql.conf:
прослушивание_адреса = '*'
PostgreSQL по умолчанию отклоняет все соединения, которые он получает с любого удаленного адреса, вам придется ослабить эти правила, добавив эту строку в
/etc/postgresql/8.4/main/pg_hba.conf:
хост все все 0.0.0.0/0 md5
Это правило контроля доступа, которое позволяет любому войти в систему с любого адреса, если он может предоставить действительный пароль (ключевое слово md5).Вы можете использовать необходимую сеть/маску вместо 0.0.0.0/0 .
После того, как вы применили эти изменения к файлам конфигурации, вам необходимо перезапустить сервер PostgreSQL.Теперь можно удаленно войти на ваш сервер, используя имя пользователя и пароль.
Другие советы
Если вы используете PostgreSQL 8 или более позднюю версию, вам может потребоваться изменить listen_addresses
установка в /etc/postgresql/8.4/main/postgresql.conf
.
Попробуйте добавить строку:
listen_addresses = *
который сообщит PostgreSQL прослушивать соединения на всех сетевых интерфейсах.
Если этот параметр не задан явно, по умолчанию этот параметр имеет значение localhost
это означает, что он будет принимать соединения только с одной и той же машины.
Мне не нужно было менять файл prostgresql.conf, но мне пришлось сделать следующее, исходя из того, что мой psql через командную строку подключался, а pgAdmin не подключался к RDS с AWS.
У меня действительно был установлен режим RDS «Общедоступный».Я убедился, что мои списки управления доступом и группы безопасности широко открыты, но проблемы по-прежнему возникают, поэтому я сделал следующее:sudo find . -name *.conf
затем sudo nano ./data/pg_hba.conf
затем добавлен в начало директив в файле pg_hba.conf host all all 0.0.0.0/0 md5
и pgAdmin автоматически залогинил меня.
Это также работало в файле pg_hba.conf.host all all md5
без какого-либо IP-адреса, и это также работало с моим IP-адресом host all all <myip>/32 md5
Кстати, мой RDS находился в VPC по умолчанию.У меня был идентичный экземпляр RDS в моем VPC, отличном от стандартного, с идентичными настройками группы безопасности, ACL и группы безопасности, что и в моем VPC по умолчанию, и я не смог заставить его работать.Не знаю почему, но это на другой день.
В терминале Linux попробуйте следующее:
sudo service postgresql start
:чтобы запустить серверsudo service postgresql stop
:остановить тебя, серверsudo service postgresql status
:проверить статус сервера
Для redhat linux
sudo vi /var/lib/pgsql9/data/postgresql.conf
pgsql9 - это папка для установленной версии postgres, для других она может отличаться
изменено listen_addresses = '*' из listen_addresses = ‘localhost’ и затем
sudo /etc/init.d/postgresql stop
sudo /etc/init.d/postgresql start
Проверьте свой брандмауэр.Когда вы его отключите, то сможете подключиться.Если вы хотите/не можете отключить брандмауэр, добавьте правило для удаленного подключения.