Назад | Перейти на главную страницу

Множественные методы аутентификации для Postgresql

В настоящее время я использую аутентификацию "md5" для доступа из локальной сети:

host all all 192.168.1.0/24 md5

Я хочу добавить метод аутентификации ldap, поэтому я добавил эту строку раньше:

host all all 192.168.1.0/24 ldap "ldap://192.168.1.2/basedn;uid=;,cn=xx,dc=yy,dc=zz,dc=ca"

Это отлично работает с учетными записями ldap, но если я попытаюсь войти в систему с учетной записью, отсутствующей на сервере LDAP, вход не удастся (postgresql не пытается выполнить аутентификацию md5).

Есть ли способ поддерживать более одного метода аутентификации с помощью postgresql?

Нет - Since the pg_hba.conf records are examined sequentially for each connection attempt, the order of the records is significant. - Другими словами, «Я собираюсь использовать метод первого совпадения».
Вам нужно будет явно указать все локальные (md5), прежде чем переходить к аутентификации LDAP "всех пользователей", чтобы это работало (и это начинает мешать поддержанию pg_hba.conf файл).

В качестве обходного пути вы можете использовать pam метод аутентификации и настройте службу PAM "postgres" для использования любых методов, которые вы хотите (включая возврат к альтернативным методам), но это ограничивает вас любыми модулями PAM, установленными / настроенными в вашей системе.
(Для подходящих широких определений "ограничений" - например, вы можете использовать одноразовые пароли для учетных записей Postgres, если вы используете PAM в качестве метода аутентификации).

Я столкнулся с той же проблемой; Я хотел использовать md5 для пользователя приложения и ldap для других пользователей в моей организации. Одно отличие состоит в том, что я использую официальный образ Docker Postgres, но мой метод должен работать для обычных пользователей Postgresql.

Образ Docker Postgres поставляется с postgres пользователь по умолчанию. Вы можете добавить конкретного пользователя в свой pg_hba.conf файл, предварительно поставив имя пользователя знаком плюс +.

Мой pg_hba.conf оказался следующим:

local all all                    trust
host  all all       127.0.0.1/32 trust
host  all all       ::1/128      trust
host  all +postgres all          md5
host  all all       all          ldap ldapurl="ldap://192.168.1.2:389/ou=People,dc=Company,dc=com?uid?one"

Предпоследняя строка поддерживает пользователя приложения, postgres, а последняя строка поддерживает несколько учетных записей пользователей LDAP.