В мире современных информационных технологий удалённое подключение к базам данных стало неотъемлемой частью работы многих предприятий и организаций. В одной из предыдущих статей нашего справочника мы описали процесс установки PostgreSQL на VPS, работающий под управлением Windows Server 2016. Теперь же мы продолжим этот путь и рассмотрим процесс первоначальной настройки удалённого доступа к PostgreSQL, что в дальнейшем позволит управлять данными и обеспечивать доступ к ним из любой точки мира.
После установки PostgreSQL позволяет подключаться исключительно с локального хоста. Для того, чтобы получить возможность удалённого подключения к PostgreSQL необходимо внести некоторые изменения в файл конфигурации и в настройки брандмауэра Windows.
Конфигурирование PostgreSQL
На нашем сервере конфигурационный файл pg_hba.conf
находится в директории C:\Program Files\PostgreSQL\15\data
. В конец данного файла необходимо добавить следующую строку:
host postgres postgres all md5
Данная строка разрешает подключения к PostgreSQL с любого IP-адреса. При этом подключение осуществляется к БД postgres
под учётной записью postgres
. В реальной жизни таким образом поступать ни в коем случае нельзя, поскольку такое подключение не является безопасным. Для подключения к СУБД администратору нужно создать специального пользователя с ограниченными правами.
В той же директории находится файл postgresql.conf
, в котором должна присутствовать строка listen_addresses = '*'
в разделе CONNECTIONS AND AUTHENTICATION
:
Создание правила в брандмауэре Windows
Далее, необходимо произвести некоторые настройки брандмауэра, которые в Windows Server 2016 удобнее производить через Server Manager.
Для запуска Server Manager перейдите в стартовое меню и кликните по соответствующей иконке.
После того, как менеджер откроется, перейдите Tools
→ Windows Firewall with Advanced Security
.
В мониторе брандмауэра необходимо добавить правило для подключения к СУБД. Для этого перейдите Inbound Rules
→ New Rule.
В открывшемся окне мастера выберите тип Port
, затем нажмите Next
.
В следующем окне укажите протокол TCP
и номер порта — 5432
, после чего снова нажмите Next
.
Затем для нашего тестового подключение мы разрешим все подключения, поэтому активируйте опцию Allow the connection
и так же нажмите Next
.
В следующем окне без внесения каких-либо изменений нажмите Next
.
И, наконец, в заключительном окне мастера в строку Name
введите имя создаваемого правила и нажмите Finish
.
Таким образом, созданное правило должно будет появиться в мониторе брандмауэра.
Тестирование созданного подключения
Для проверки возможности подключения мы будем использовать виртуальный сервер, работающий под управлением операционной системы Ubuntu. Во-первых, необходимо проверить доступ к порту 5432. Для чего можно использовать утилиту telnet
. Синтаксис данной утилиты применяется следующий:
telnet IP-address Port
В данном случае IP-address
— IP-адрес сервера, а Port
— номер порта, к которому производится подключение. В случае, если порт на удалённом сервере доступен для подключения, вывод команды telnet
будет выглядеть следующим образом:
Для того, чтобы прервать установленное соединение, используйте комбинацию клавиш Ctrl Z
.
Далее, необходимо установить на linux-сервер клиента, с помощью которого будет осуществляться подключение к PostgreSQL.
$ sudo apt install postgresql-client
После успешной инсталляции проверьте версию установленного софта:
$ psql --version
Вывод команды выглядит примерно следующим образом:
Теперь при помощи postgresql-client
вы сможете подключиться к вашей СУБД, установленной на виртуальном windows-сервере. Формат команды для подключения выглядит как:
psql -U user-name -h IP-address -d DB-name
В данном случае:
-U
— ключ, который говорит о том, что подключение будет осуществлено под учётной записью, указанной после ключа;user-name
— имя учётной записи, используемой для подключения;-h
— ключ, указывающий на то, что подключение будет произведено к удалённому хосту;IP-address
— IP-адрес удалённого хоста;-d
— ключ, после которого указывается имя базы данных, к которой производится подключение;DB-name
— имя базы данных.
В нашем случае команда для подключения будет выглядеть следующим образом:
psql -U postgres -h 194.58.71.188 -d postgres
На скриншоте ниже видно, что мы успешно подключились к СУБД, расположенной на нашей тестовой VPS с использованием терминального клиента psql
в командной строке на linux-сервере.