База знаний по Open Source
Yandex поиск по всему сайту
Авторизация

В 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 поставляемый по-умолчанию выглядит примерно так:

# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
#host all all 127.0.0.1/32 trust
host all all 0.0.0.0/0 trust
# IPv6 local connections:
host all all ::1/128 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local replication postgres trust
#host replication postgres 127.0.0.1/32 trust
#host replication postgres ::1/128 trust