В PostgreSQL клиентский доступ к базам данных на уровне хоста задается в файле pg_hba.conf (hba означает host-based authentication — аутентификацию на основе хоста.). Файл находится в хранится в директории кластера баз данных. Записи этого файла определяют: какиe узлы могут подключиться, метод аутентификации клиентов, какие имена пользователей PostgreSQL они могут использовать, к каким базам данных кластера они могут получить доступ. Записи могут быть следующих форм:
local DATABASE USER METHOD [OPTIONS] host DATABASE USER ADDRESS METHOD [OPTIONS] hostssl DATABASE USER ADDRESS METHOD [OPTIONS] hostnossl DATABASE USER ADDRESS METHOD [OPTIONS]
Поля заглавными буквами должны быть заменены актуальными значениями.
Значения полей:
- local — запись будет соответствовать локальным подключениям, производимым через Unix-domain socket. Если записи такого типа нет, то подключения через Unix-domain socket будут запрещены.
- host — запись соответсвует подключениям через TCP/IP. Запись host соответствует как SSL так и обычным подключениям. Здесь нужно обратить внимание на значение параметра listen_addresses — по умолчанию такие соединения будут ожидаться только с localhost. Для того чтобы подключения были возможны с других, удаленных хостов необходимо прописать соотвествующие адреса.
- hostssl — запись соответствует только SSL подключениям через TCP/IP.
- hostnossl — запись соответствует только не SSL (обычным) подключениям через TCP/IP.
- DATABASE — определяет имена баз данных, доступ к которым описывает данная запись. Значениями могут быть:
- собственно имя или имена баз данных кластера PostgreSQL, разделенные запятой;
- @filename — имена баз данных хранятся во внешнем файле filename;
- all — все базы данных кластера PostgreSQL;
- sameuser — база данных с тем-же именем, что и пользователь в поле USER;
- samerole — база данных с тем-же именем, что и роль пользователя в поле USER;
- replication — определяет, что запись будет соответствовать случаю подключения для репликации.
- USER — имя или имена пользователей PostgreSQL, правила доступа для которых определяет данная запись. Значениями могут быть:
- собственно имя или имена пользователей PostgreSQL, разделенные запятой;
- all — все пользователи PostgreSQL;
- @filename — имена пользователей хранятся во внешнем файле filename;
- +группа — все пользователи, входящие в указанную группу/группы.
- ADDRESS — Определяет адреса машины клиента, которым соответствует эта запись. Значениями могут быть:
- all — любой адрес;
- samehost — адрес самого сервера PostgreSQL;
- samenetto — все адреса подсети в которой находится сервер;
- имя или имена хостов, разделенные запятыми;
- .hostname — суффикс имени хоста: .myhost.com — допустимы one.myhost.com, two.myhost.com и т.д. Но не myhost.com!!!
- IP адрес или диапазон IP адресов в нотации CIDR (например 192.168.0.1/24).
- METHOD — Определяет метод аутентификации, который будет использован. Подробно по методам аутентификации можно посмотреть здесь. Возможные значения коротко:
- trust — Безусловно разрешает все подключения. Этот метод разрешает любому, кто может подключиться к серверу БД, зайти под любым пользователем PostgreSQL без необходимости предоставить пароль или использования какого-либо ещё способа аутентификации.
- reject — Безусловно отклоняет подключение. Это полезно для «отфильтровывания» некоторых узлов из группы, например строка reject может запретить конкретному узлу подключение, тогда как следующая строка разрешает подключения для остальных узлов этой сети.
- md5 — Требует от клиента предоставить md5 шифрованный пароль для аутентификации.
- password — Требует от клиента предоставить незашифрованный пароль для аутентификации. Так как пароль посылается по сети в открытом виде, эта опция не должна использоваться для небезопасных сетей.
- gss — Использует GSSAPI для аутентификации пользователя. Доступно только для TCP/IP подключений.
- sspi — Использует SSPI для аутентификации пользователя. Доступно только для Windows.
- krb5 — Использует Kreberos V5 для аутентификации пользователя. Доступно только для TCP/IP подключений.
- ident — Получает имя пользователя ОС клиента, соединяясь с сервером ident на клиенте и проверяет, соответствует ли оно имени пользователя для запрашиваемой БД. Аутентификация ident может использоваться только на TCP/IP соединениях. Когда это значение используется для локальных соединений, то вместо этого используется peer аутентификация.
- peer — Получает имя пользователя ОС из самой ОС и проверяет, соответствует ли оно имени пользователя для запрашиваемой БД. Доступно только для локальных подключений.
- ldap — Аутентификация при помощи сервера LDAP.
- radius — Аутентификация при помощи сервера RADIUS.
- cert — Аутентификация при помощи SSL сертификата клиента.
- pam — Аутентификация при помощи Pluggable Authentication Modules (PAM), предоставляемыми ОC.
Файл pg_hba.conf поставляемый по-умолчанию выглядит примерно так:
# Database administrative login by Unix domain socket local all postgres peer # TYPE DATABASE USER ADDRESS METHOD # "local" is for Unix domain socket connections only local all all peer # IPv4 local connections: host all all 127.0.0.1/32 scram-sha-256 # IPv6 local connections: host all all ::1/128 scram-sha-256 # Allow replication connections from localhost, by a user with the # replication privilege. local replication all peer host replication all 127.0.0.1/32 scram-sha-256 host replication all ::1/128 scram-sha-256