• 22 Июн
  • 2015
Как указывать адреса машин в конфиге pg_hba.conf
Это статья из серии "PostgeSQL". Вы также можете почитать другие статьи из этой серии:
  1. От SQLite до PostgreSQL
  2. Удаленный доступ к БД на Postgre
  3. Как сделать дамп БД на PostgreSQL
  4. Как указывать адреса машин в конфиге pg_hba.conf

При настройке PostgreSQL может потребоваться редактирование файла pg_hba.conf, например для предоставления удаленного доступа к БД. Для этого необходимо прописать хост, в котором указывается диапазон IP-адресов, а также длина маски. Задается этот адрес в виде обычной десятичной нотации, после которой через слеш указывается длина маски.

Длина маски определяет сколько бит IP адреса должны совпадать с заданными тут. Биты справа от маски в указанном IP адресе должны быть равны нулю. Не должно быть пробелов между адресом, знаком / и длиной маски.

Обычным примером диапазона IP адресов, указанного таким образом, является 172.20.143.89/32 для конкретного хоста, 172.20.143.0/24 для небольшой сети, 10.6.0.0/16 для большой. 0.0.0.0/0 означает любой IPv4 адрес, а ::/0 - любой IPv6 адрес. Для того, чтобы указать конкретный хост, используйте маску 32 для IPv4 или 128 для IPv6. В сетевом адресе не пропускайте конечные нули.
IP адрес, заданный в формате IPv4 будет соответствовать IPv6 подключению с соответствующим адресом, например, 127.0.0.1 будет соответствовать адресу ::ffff:127.0.0.1. Адрес же, заданный в формате IPv6, будет соответствовать только IPv6 подключениям, даже если сам этот адрес находится в диапазоне IPv4-in-IPv6.  Обратите внимание, что записи в формате IPv6 будут отклонены, если системная библиотека С не поддерживает IPv6 адреса.
Кроме того, Вы можете использовать all, чтобы указать любой адрес, samehost, чтобы указать IP адрес самого сервера, и samenetto, что будет указывать на любой адрес в подсети, к которой подключён сервер.
Если указано имя хоста (всё, что не является IP адресом или ключевым словом - рассматривается как имя хоста), то это имя сравнивается с результатом получения имени узла по IP (то есть, используется reverse DNS lookup, если используется DNS). При сравнении регистр не учитывается. Если находится совпадение, то по имени определяется IP хоста при помощи forward DNS lookup, соответствует ли хоть один из полученных IP адресу хоста. Только если обе проверки выполняются,  тогда считается что совпадение с записью произошло. (Имя узла, которое используется в pg_hba.conf, должно быть одним из адресов, полученных при разрешении имени, иначе совпадение не будет засчитано. Некоторые базы данных имён позволяют ассоциировать с IP адресом несколько имён хостов, но ОС будет возвращать только одно имя при запросе на получения имени по IP.)
comments powered by Disqus