19.5. Аутентификация по паролю#

19.5. Аутентификация по паролю

19.5. Аутентификация по паролю #

Существует несколько методов аутентификации на основе пароля. Эти методы работают похожим образом, но отличаются в том, как пароли пользователей хранятся на сервере и как пароль, предоставленный клиентом, передается по соединению.

scram-sha-256

Метод scram-sha-256 выполняет аутентификацию SCRAM-SHA-256, как описано в RFC 7677. Это схема вызова-ответа, которая предотвращает перехват паролей на ненадежных соединениях и поддерживает хранение паролей на сервере в криптографически хешированной форме, которая считается безопасной.

Это самый безопасный из предоставляемых в настоящее время методов, но он не поддерживается старыми клиентскими библиотеками.

md5

Метод md5 использует специальный, менее безопасный механизм вызова-ответа. Он предотвращает перехват пароля и избегает хранения паролей на сервере в открытом виде, но не обеспечивает защиту, если злоумышленник украдет хеш пароля с сервера. Кроме того, хеш-алгоритм MD5 в настоящее время не считается надежным против целенаправленных атак.

С методом md5 нельзя использовать функцию db_user_namespace.

Для облегчения перехода с метода md5 на новый метод SCRAM, если в pg_hba.conf указан метод md5, но пароль пользователя на сервере зашифрован для SCRAM (см. ниже), то автоматически будет выбрана аутентификация на основе SCRAM.

password

Метод password отправляет пароль в открытом виде и, следовательно, уязвим к атакам подслушивания пароля. Если это возможно, его следует всегда избегать. Если соединение защищено SSL-шифрованием, то password можно использовать безопасно. (Хотя использование аутентификации по сертификату SSL может быть более предпочтительным выбором, если вы полагаетесь на использование SSL).

Пароли базы данных Tantor BE отделены от паролей пользователей операционной системы. Пароль для каждого пользователя базы данных хранится в системном каталоге pg_authid. Паролями можно управлять с помощью SQL-команд CREATE ROLE и ALTER ROLE, например, CREATE ROLE foo WITH LOGIN PASSWORD 'secret' , или команда psql \password. Если для пользователя не установлен пароль, сохраненный пароль равен null, и аутентификация по паролю всегда будет неудачной для этого пользователя.

Доступность различных методов аутентификации на основе пароля зависит от того, как пароль пользователя на сервере зашифрован (или, точнее, хеширован). Это контролируется параметром конфигурации password_encryption в момент установки пароля. Если пароль был зашифрован с использованием настройки scram-sha-256, то его можно использовать для методов аутентификации scram-sha-256 и password (но в последнем случае передача пароля будет в открытом виде). Спецификация метода аутентификации md5 автоматически переключится на использование метода scram-sha-256 в этом случае, как объяснено выше, поэтому она также будет работать. Если пароль был зашифрован с использованием настройки md5, то его можно использовать только для спецификаций методов аутентификации md5 и password (снова с передачей пароля в открытом виде в последнем случае). (В предыдущих версиях PostgreSQL поддерживалось хранение пароля на сервере в открытом виде. Это больше не возможно). Чтобы проверить хеши паролей, хранящихся в настоящее время, см. системный каталог pg_authid.

Для обновления существующей установки с использованием шифрования md5 на scram-sha-256, после убеждения в том, что все используемые клиентские библиотеки достаточно новы для поддержки SCRAM, установите password_encryption = 'scram-sha-256' в файле postgresql.conf, заставьте всех пользователей задать новые пароли и измените спецификации метода аутентификации в файле pg_hba.conf на scram-sha-256.