В настоящее время я использую аутентификацию "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.