14 Занятие 14: Безопасность / Профили пользователей
Эта страница извлечена из официального PDF в нативный Markdown. Текст слайдов, код и комментарии сохранены в порядке чтения; исходные PDF и HTML остаются эталоном макета. HTML source: pgpro_14_profile.html Archive: PGPRO-handouts-16.zip Страниц PDF: 16
Page 1: Безопасность / Профили пользователей
Авторские права
© Postgres Professional, 2023–2026 Авторы: Алексей Береснев, Илья Баштанов, Павел Толмачев, Игорь Гнатюк Фото: Олег Бартунов (монастырь Пху и пик Бхрикути, Непал)
Использование материалов курса
Некоммерческое использование материалов курса (презентации, демонстрации) разрешается без ограничений. Коммерческое использование возможно только с письменного разрешения компании Postgres Professional. Запрещается внесение изменений в материалы курса.
Обратная связь
Отзывы, замечания и предложения направляйте по адресу: edu@postgrespro.ru
Отказ от ответственности
Компания Postgres Professional не несет никакой ответственности за любые повреждения и убытки, включая потерю дохода, нанесенные прямым или непрямым, специальным или случайным использованием материалов курса. Компания Postgres Professional не предоставляет каких-либо гарантий на материалы курса. Материалы курса предоставляются на основе принципа «как есть» и компания Postgres Professional не обязана предоставлять сопровождение, поддержку, обновления, расширения и изменения.
Page 2: Темы
- Запрет простых паролей
- Профили пользователей
Page 3: Запрет простых паролей
Модуль passwordcheck
Page 4: Модуль passwordcheck
- user123
- passwordcheck
- R0cvjyfdnbrf+
- passwordcheck
- Проверка надежности паролей пользователей
- CREATE ROLE
- ALTER ROLE
- \password
Комментарии преподавателя
Модуль passwordcheck проверяет надежность паролей, задаваемых командами CREATE ROLE и ALTER ROLE, а также устанавливаемых метакомандой \password в psql.
Модуль должен быть загружен с помощью shared_preload_libraries или командой LOAD.
Модуль passwordcheck проверяет, что пароль:
● содержит не менее 8 символов;
● содержит и буквы, и иные символы;
● не содержит имя роли.
Модуль не предусматривает конфигурационных настроек.
https://postgrespro.ru/docs/enterprise/16/passwordcheck#PASSWORDCHE CK
Page 5: Модуль passwordcheck
Расширение passwordcheck требует загрузки одноименной разделяемой библиотеки:
После подключения библиотеки необходимо перезапустить СУБД.
Создадим базу данных и роль:
Запишем в дополнительный конфигурационный файл правило для парольной аутентификации нового пользователя при подключении к БД pgpro_profile:
Проверим, можно ли установить пользователю нестойкий пароль bob123:
Теперь попробуем установить сложный пароль:
Удалим модуль passwordcheck и снова перезапустим СУБД.
Page 6: Профили пользователей
Профиль
- Попытки входа
- Время жизни пароля
- Уровень сложности пароля
Page 7: Профиль
Профиль ограничивает использование системы пользователем
- количество неудачных попыток входа
- время жизни пароля и время неактивности
- уровень сложности пароля
- По умолчанию к ролям применяется профиль default
- не устанавливает никаких ограничений, но это можно изменить
- Управление профилями
- суперпользователи или роли, включенные в pg_manage_profiles
Комментарии преподавателя
Ядро Postgres Pro обеспечивает гораздо более гибкое управление парольными политиками, чем простое расширение passwordcheck.
Профиль ограничивает использование базы данных и устанавливает парольную политику для ролей. Профили определяются на уровне кластера баз данных и назначаются ролям. Новый профиль создает команда CREATE PROFILE, изменяет — ALTER PROFILE, удаляет — DROP PROFILE.
Профиль назначается при создании роли или командой ALTER ROLE. Новым ролям по умолчанию назначается профиль default. Исходно профиль default не устанавливает ограничений, но их можно добавить командой ALTER PROFILE. Если роли назначен профиль, отличный от default, рассмотренный выше модуль passwordcheck не работает.
Управлять профилями с помощью указанных команд разрешено только суперпользователям или пользователям, включенным в предустановленную роль pg_manage_profiles.
https://postgrespro.ru/docs/enterprise/16/sql-createprofile
Page 8: Попытки входа
FAILED\_LOGIN\_ATTEMPTS
- количество неудачных попыток входа до блокировки пользователя
- ALTER ROLE … ACCOUNT UNLOCK
- FAILED_AUTH_KEEP_TIME
- время в днях до сброса счетчика неудачных попыток
Комментарии преподавателя
Параметр профиля FAILED_LOGIN_ATTEMPTS ограничивает количество неудачных попыток входа. По превышении этого количества пользователь блокируется. Суперпользователь может разблокировать заблокированную роль командой ALTER ROLE с предложением ACCOUNT UNLOCK.
Параметр профиля FAILED_AUTH_KEEP_TIME задает время в днях с момента первой неудачной попытки входа; при попытке входа по истечении этого времени счетчик неудачных попыток сбрасывается, а пользователь разблокируется.
Page 9: Время жизни пароля
{#source-figure-009 caption=“Source slide page 9: Время жизни пароля”}
Комментарии преподавателя
Параметр профиля PASSWORD_LIFE_TIME задает период в днях, в течение которого пароль действителен. При установленном для роли атрибуте VALID UNTIL будет выбираться наиболее короткий срок действия пароля, исходя из этих двух значений.
Если установлен PASSWORD_GRACE_TIME, действие пароля продлевается, но в течение этого периода выдаются предупреждение о необходимости смены пароля. Если пароль так и не был изменен, последующие попытки входа в сеанс будут отвергнуты.
Параметр профиля USER_INACTIVE_TIME задает максимальный период в днях с момента последнего входа пользователя, в течение которого пользователь должен снова войти в сеанс. В противном случае пользователь блокируется.
Page 10: Уровень сложности пароля
PASSWORD\_MIN\_UNIQUE\_CHARS
- минимальное количество уникальных символов
- PASSWORD_MIN_LEN
- минимальная длина
- PASSWORD_REQUIRE_COMPLEX
- проверка надежности пароля
- PASSWORD_REUSE_TIME и PASSWORD_REUSE_MAX
- время в днях и количество смен паролей, после которых старый пароль
- можно использовать повторно
Комментарии преподавателя
Параметры профиля PASSWORD_MIN_UNIQUE_CHARS и PASSWORD_MIN_LEN ограничивают минимальное количество уникальных символов в пароле и его минимальную длину.
Параметр PASSWORD_REQUIRE_COMPLEX требует, чтобы пароль содержал и буквы, и небуквенные символы, а также не содержал имя пользователя.
Параметры профиля PASSWORD_REUSE_TIME и PASSWORD_REUSE_MAX определяют, когда пароль может быть использован повторно: для этого должно пройти указанное время и пароль должен быть сменен указанное количество раз.
Page 11: Профили пользователей
Пока ничего не мешает пользователю установить простой пароль:
Создадим профиль:
Этот профиль определяет, что пароль необходимо менять через 60 дней. Еще в течение 7 дней будут выводиться предупреждения о необходимости поменять пароль. Минимальная длина пароля — 8 символов, причем пароль должен содержать как буквы, так и другие символы, а имя пользователя не должно входить в пароль. Назначим роли bob профиль prof:
Проверим, какой профиль связан с ролью:
Попробуем установить короткий пароль:
Попробуем сделать пароль длиннее:
Усложним:
Модифицируем профиль prof, установив ограничение в три неудачные попытки начать сеанс до блокировки учетной записи.
Боб пытается подключиться три раза с неправильными паролями:
Page 12: Page 12
Теперь роль заблокирована:
Разблокируем роль, дадим Бобу шанс вспомнить пароль:
Теперь сократим срок действия пароля индивидуально для Боба, оставив профиль неизменным:
Попытка подключения (пароль правильный):
В журнале сообщений сервера видим причину отказа в соединении:
Следующим образом можно вернуть для роли профиль по умолчанию:
Удалим профиль:
Удалим роль:
Page 13: Итоги
Расширение passwordcheck проверяет надежность паролей
- Встроенный механизм профилей позволяет настраивать политики использования системы пользователями
- Профиль позволяет задавать уровень сложности пароля и ограничивать время его жизни
- Можно ограничивать количество неудачных попыток ввода пароля
Page 14: Практика
- Создайте профиль с ограничением на минимальное количество разных символов в пароле и проверьте его. 2. Установите ограничение в две неудачные попытки ввода пароля для пользователя и проверьте его работу.
Комментарии преподавателя
Создайте профиль mgr1 с ограничением PASSWORD_MIN_UNIQUE_CHARS = 8. Зарегистрируйте пользователя mgr1 с профилем mgr и проверьте возможность установки пароля не менее, чем с восемью отличающимися символами.
Используйте настройку LIMIT FAILED_LOGIN_ATTEMPTS по аналогии с демонстрацией.
Page 15: 1. Профиль пользователя
Создадим базу данных pgpro_profile:
Создадим профиль с ограничением на минимальное количество отличающихся символов в пароле:
Зарегистрируем пользователя с этим профилем:
Правило для парольной аутентификации нового пользователя при подключении к БД pgpro_profile:
Проверим профиль роли:
Пароль, разрешенный профилем:
Такой пароль был успешно назначен роли. Пароль с меньшим количеством отличающихся символов:
2. Ограничение неудачных попыток ввода пароля
Разрешим лишь две попытки.
Пару раз введем неверный пароль.
Page 16: Page 16
Блокировка должна быть уже установлена:
Удалим роль и профиль:
Удалим дополнительный файл конфигурации: