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
.