Профили безопасности
Профили безопасности позволяют производить групповую настройку политик безопасности СУБД в отношении пользователей.
Описание таблиц
Связь пользователя с определенным профилем безопасности хранится в таблице pg_catalog.qhb_auth_profile_authid, где столбец role_id указывает на Oid пользователя СУБД, расположенного в каталоге pg_catalog.pg_authid, а столбец profile_id указывает на сам профиль, расположенный в таблице pg_catalog.qhb_auth_profile.
По умолчанию, доступен один начальный профиль безопасности (единственная запись в qhb_auth_profile) с идентификатором Oid равным 9352. Удаление этого профиля может повредить стабильности работы системы, так как он используется для всех пользователей, кому еще не был назначен администратором СУБД выделенный профиль.
Информация о заблокированных пользователях хранится в таблице pg_catalog.qhb_user_lockout, причем блокировки применяются только при включенном параметре logon_jobs = on конфигурации СУБД в qhb.conf. По умолчанию этот параметр выключен, то есть logon_jobs = off.
Перед обновлением кластера утилитами qhb_upgrade следует выключить параметр logon_jobs выставив его в off и перезапустить СУБД. Иначе стабильность процесса обновления кластера не гарантируется.
Атрибутивный состав таблиц
для таблицы qhb_user_lockout доступны следующие столбцы:
- Oid oid - идентификатор записи, первичный ключ;
- Oid role_id - идентификатор пользователя из таблицы pg_catalog.pg_authid;
- int4 invalid_attempts - счетчик ошибочных попыток ввода пароля, необходим для своевременной блокировки;
- bool locked - признак блокировки пользователя role_id;
- timestamp locked_since - дата и время начала блокировки;
- timestamp last_activity - дата и время последнего захода в СУБД.
для таблицы qhb_auth_profile доступны следующие столбцы:
- Oid oid - идентификатор записи, первичный ключ;
- int4 max_failed_attempts - разрешенное данным профилем число ошибочных попыток ввода пароля;
- bool auto_unlock - признак автоматической разблокировки пользователей данного профиля безопасности;
- int4 lockout_duration_sec - длительность блокировки в секундах, при включенной автоматической разблокировке;
- int4 inactivity_lockout_sec - опция блокировки по таймауту неактивности пользователей данного профиля, значение в секундах;
- bool password_check - признак проверки задаваемых паролей на соответствие политикам безопасности профиля;
- int4 password_len - опция задания минимальной длины пароля, значение в количестве символов;
- int4 alphabet_size - опция задания минимальной мощности алфавита пароля.
для таблицы qhb_auth_profile_authid доступны следующие столбцы:
- Oid role_id - идентификатор пользователя из таблицы pg_catalog.pg_authid, первичный ключ;
- Oid profile_id идентификатор профиля из таблицы pg_catalog.qhb_auth_profile.
Процедуры SQL для управления профилями
Разблокировать всех пользователей для данного профиля
qhb_auth_profile_unlock_by_profile ( id_profile )
Где id_profile (тип - Oid) - идентификатор профиля.
Пример:
SELECT qhb_auth_profile_unlock_by_profile(9352);
Заблокировать всех пользователей для данного профиля
qhb_auth_profile_lockout_by_profile ( id_profile )
Где id_profile (тип - Oid) - идентификатор профиля.
Пример:
SELECT qhb_auth_profile_lockout_by_profile(9352);
Установить минимальную мощность алфавита пароля для данного профиля
qhb_auth_profile_set_password_alphabet_size ( id_profile, total_char)
Где id_profile (тип - Oid) - идентификатор профиля. total_char (тип - INTEGER) - мощность алфавита (общее количество символов) или NULL для отключения проверки.
Пример:
SELECT qhb_auth_profile_set_password_alphabet_size(9352, 60);
Установить минимальную длину пароля для данного профиля
qhb_auth_profile_set_password_len ( id_profile, pass_length)
Где id_profile (тип - Oid) - идентификатор профиля. pass_length (тип - INTEGER) - минимальная длина пароля или NULL для отключения проверки.
Пример:
SELECT qhb_auth_profile_set_password_len(9352, 6);
Отключить проверку сложности пароля в данном профиле
qhb_auth_profile_disable_password_check ( id_profile )
Где id_profile (тип - Oid) - идентификатор профиля.
Пример:
SELECT qhb_auth_profile_disable_password_check(9352);
Включить проверку сложности паролей в данном профиле
qhb_auth_profile_enable_password_check ( id_profile )
Где id_profile (тип - Oid) - идентификатор профиля.
Пример:
SELECT qhb_auth_profile_enable_password_check(9352);
Заблокировать данного пользователя
qhb_auth_profile_lockout_user ( id_user )
Где id_user (тип - Oid) - идентификатор пользователя.
Пример:
SELECT qhb_auth_profile_lockout_user(10);
Разблокировать данного пользователя
qhb_auth_profile_unlock_user ( id_user )
Где id_user (тип - Oid) - идентификатор пользователя.
Пример:
SELECT qhb_auth_profile_unlock_user(10);
Включить либо выключить автоматическую разблокировку пользователей данного профиля
qhb_auth_profile_set_auto_unlock ( id_profile, status)
Где id_profile (тип - Oid) - идентификатор профиля. status (тип - BOOLEAN) - значение параметра.
Пример:
SELECT qhb_auth_profile_set_auto_unlock(9352, true);
Установить допустимое число ошибок при вводе пароля для пользователей данного профиля
qhb_auth_profile_set_max_failed_attempts ( id_profile, num_errors)
Где id_profile (тип - Oid) - идентификатор профиля. num_errors (тип - INTEGER) - допустимое число ошибок при вводе пароля.
Пример:
SELECT qhb_auth_profile_set_max_failed_attempts(9352, 10);
Убрать проверку на максимальное число ошибок при вводе пароля для пользователей данного профиля
qhb_auth_profile_set_unlimited_attempts ( id_profile )
Где id_profile (тип - Oid) - идентификатор профиля.
Пример:
SELECT qhb_auth_profile_set_unlimited_attempts(9352);
Назначить данному пользователю профиль по умолчанию
qhb_auth_profile_unset ( id_user )
Где id_user (тип - Oid) - идентификатор пользователя.
Пример:
SELECT qhb_auth_profile_unset(10);
Назначить данному пользователю данный профиль безопасности
qhb_auth_profile_set ( id_user, id_profile )
Где id_user (тип - Oid) - идентификатор пользователя. id_profile (тип - Oid) - идентификатор профиля.
Пример:
SELECT qhb_auth_profile_set(10, 9352);
Удалить профиль безопасности
qhb_auth_profile_delete ( id_profile )
Где id_profile (тип - Oid) - идентификатор профиля.
Пример:
SELECT qhb_auth_profile_delete(1);
Создать новый профиль безопасности по данному шаблону
qhb_auth_profile_create ( id_profile )
Где id_profile (тип - Oid) - идентификатор профиля-образца.
Пример:
SELECT qhb_auth_profile_create(9352);
ВНИМАНИЕ!
В случае ручного управления таблицами каталога, при выполнении запросов SQL напрямую к таблицам pg_authid, qhb_auth_profile, qhb_user_lockout, qhb_auth_profile_authid, возможно нарушение стабильности работы подсистемы профилей безопасности и СУБД в целом. Эти таблицы являются таблицами разделяемого каталога, и поэтому не поддерживают триггеры для отслеживания изменений в них. Следовательно, логика была реализована в SQL процедурах, указанных в таблице выше.
Проверка паролей на соответствие политике профиля
Проверка паролей на сложность, требуемую политикой профиля, происходить только при установке пароля при включенном значении password_check в соответствующем профиле. При использовании администратором СУБД процедур для управления политиками сложности пароля, следует также задать новые пароли для всех пользователей, относящихся к профилю и разблокировать их для успешного входа. При ослаблении параметра сложности пароля блокировки не происходит и пользователь может зайти со своим прежним паролем.
Интеграция с ролями ИБ
Для пользователей, назначенных Администраторами СУБД (qhb_dbms_admin
) доступно
создание, изменение, удаление и назначение профилей безопасности. Также они имеют возможность
подвергнуть других пользователей блокировке и разблокированию (за исключением других суперпользователей и
Администраторов СУБД).
Для пользователей, назначенных Администраторами конкретных БД (qhb_db_admin
) не предоставляется
дополнительных полномочий, таких как создание, изменение, удаление и назначение профилей безопасности.