Профили безопасности
Профили безопасности позволяют производить групповую настройку политик безопасности СУБД в отношении пользователей.
Описание каталогов
Связь пользователя с определенным профилем безопасности хранится в каталоге qhb_auth_profile_authid, где столбец role_id указывает на OID пользователя СУБД, расположенного в каталоге pg_authid, а столбец profile_id указывает на сам профиль, расположенный в каталоге qhb_auth_profile.
По умолчанию доступен один начальный профиль безопасности (единственная запись в qhb_auth_profile) с OID равным 9352. Удаление этого профиля может повредить стабильности работы системы, так как он используется для всех пользователей, которым администратором СУБД еще не был назначен выделенный профиль.
Информация о заблокированных пользователях хранится в каталоге qhb_user_lockout, причем блокировки применяются только при включенном параметре logon_jobs = on конфигурации СУБД в qhb.conf. По умолчанию этот параметр выключен, то есть logon_jobs = off.
Перед обновлением кластера утилитой qhb_upgrade следует выключить параметр logon_jobs, выставив его в off, и перезапустить СУБД. Иначе стабильность процесса обновления кластера не гарантируется.
Процедуры SQL для управления профилями
qhb_auth_profile_unlock_by_profile ( id_profile oid )
Разблокирует всех пользователей для данного профиля. Аргумент id_profile — идентификатор профиля.
Пример:
SELECT qhb_auth_profile_unlock_by_profile(9352);
qhb_auth_profile_lockout_by_profile ( id_profile oid )
Блокирует всех пользователей для данного профиля. Аргумент id_profile — идентификатор профиля.
Пример:
SELECT qhb_auth_profile_lockout_by_profile(9352);
qhb_auth_profile_set_password_alphabet_size ( id_profile oid, total_char integer )
Устанавливает минимальную мощность алфавита пароля для данного профиля. Аргумент id_profile — идентификатор профиля. Аргумент total_char — мощность алфавита (общее количество символов) или NULL для отключения проверки.
Пример:
SELECT qhb_auth_profile_set_password_alphabet_size(9352, 60);
qhb_auth_profile_set_password_len ( id_profile oid, pass_length integer )
Устанавливает минимальную длину пароля для данного профиля. Аргумент id_profile — идентификатор профиля. Аргумент pass_length — минимальная длина пароля или NULL для отключения проверки.
Пример:
SELECT qhb_auth_profile_set_password_len(9352, 6);
qhb_auth_profile_disable_password_check ( id_profile oid )
Выключает проверку сложности пароля в данном профиле. Аргумент id_profile — идентификатор профиля.
Пример:
SELECT qhb_auth_profile_disable_password_check(9352);
qhb_auth_profile_enable_password_check ( id_profile oid )
Включает проверку сложности паролей в данном профиле. Аргумент id_profile — идентификатор профиля.
Пример:
SELECT qhb_auth_profile_enable_password_check(9352);
qhb_auth_profile_lockout_user ( id_user oid )
Блокирует заданного пользователя. Аргумент id_user — идентификатор пользователя.
Пример:
SELECT qhb_auth_profile_lockout_user(10);
qhb_auth_profile_unlock_user ( id_user oid )
Разблокирует заданного пользователя. Аргумент id_user — идентификатор пользователя.
Пример:
SELECT qhb_auth_profile_unlock_user(10);
qhb_auth_profile_set_auto_unlock ( id_profile oid, status bool )
Включает и выключает автоматическую разблокировку пользователей данного профиля. Аргумент id_profile — идентификатор профиля. Аргумент status — значение параметра.
Пример:
SELECT qhb_auth_profile_set_auto_unlock(9352, true);
qhb_auth_profile_set_max_failed_attempts ( id_profile oid, num_errors integer )
Устанавливает допустимое число ошибок при вводе пароля для пользователей данного профиля. Аргумент id_profile — идентификатор профиля. Аргумент num_errors — допустимое число ошибок при вводе пароля.
Пример:
SELECT qhb_auth_profile_set_max_failed_attempts(9352, 10);
qhb_auth_profile_set_unlimited_attempts ( id_profile oid )
Убирает проверку на максимальное число ошибок при вводе пароля для пользователей данного профиля. Аргумент id_profile — идентификатор профиля.
Пример:
SELECT qhb_auth_profile_set_unlimited_attempts(9352);
qhb_auth_profile_unset ( id_user oid )
Назначает заданному пользователю профиль по умолчанию. Аргумент id_user — идентификатор пользователя.
Пример:
SELECT qhb_auth_profile_unset(10);
qhb_auth_profile_set ( id_user oid, id_profile oid )
Назначает заданному пользователю данный профиль безопасности. Аргумент id_user — идентификатор пользователя. Аргумент id_profile — идентификатор профиля.
Пример:
SELECT qhb_auth_profile_set(10, 9352);
qhb_auth_profile_delete ( id_profile oid )
Удаляет профиль безопасности. Аргумент id_profile — идентификатор профиля.
Пример:
SELECT qhb_auth_profile_delete(1);
qhb_auth_profile_create ( id_profile oid )
Создает новый профиль безопасности по заданному шаблону. Аргумент id_profile — идентификатор профиля-образца.
Пример:
SELECT qhb_auth_profile_create(9352);
ВНИМАНИЕ!
В случае ручного управления таблицами каталога при выполнении запросов SQL напрямую к каталогам pg_authid, qhb_auth_profile, qhb_user_lockout, qhb_auth_profile_authid возможно нарушение стабильности работы подсистемы профилей безопасности и СУБД в целом. Эти каталоги находятся в разделяемом каталоге и поэтому не поддерживают триггеры для отслеживания изменений в них. Следовательно, логика была реализована в SQL-процедурах, указанных выше.
Просмотр текущего профиля безопасности пользователя
qhb_auth_profile_current()
Функция qhb_auth_profile_current позволяет вывести имя текущего профиля безопасности, например:
SELECT qhb_auth_profile_current();
qhb_auth_profile_show( profile_name text )
Аргумент profile_name — имя существующего профиля безопасности.
Функция qhb_auth_profile_show позволяет узнать атрибуты заданного профиля безопасности, например:
SELECT * FROM qhb_auth_profile_show(qhb_auth_profile_current());
Такой запрос выведет атрибуты текущего профиля безопасности пользователя.
Синтаксис SQL для управления профилями безопасности
Помимо доступа к управлению профилями через указанные процедуры доступен синтаксис SQL в виде команд: CREATE PROFILE, ALTER PROFILE, DROP PROFILE.
Представления для просмотра текущих настроек
Для просмотра профилей безопасности доступны представления SQL: role_profiles, role_profiles_list, role_lockouts:
-
представление role_profiles_list позволяет Администратору СУБД просмотреть все доступные профили безопасности в системе. Обычному пользователю будет показан его собственный профиль;
-
представление role_profiles позволяет Администратору СУБД просмотреть назначения профилей безопасности пользователям системы. Обычному пользователю будет показано его собственное назначение;
-
представление role_lockouts позволяет Администратору СУБД просмотреть текущие блокировки пользователей системы.
Пример использования представлений:
SELECT * FROM role_profiles; -- просмотр назначений
SELECT * FROM role_profiles_list; -- просмотр профилей безопасности
SELECT * FROM role_lockouts; -- просмотр блокировок
Проверка паролей на соответствие политике профиля
Проверка паролей на сложность, требуемую политикой профиля, происходить только при установке пароля c включенным password_check в соответствующем профиле. При использовании администратором СУБД процедур для управления политиками сложности пароля следует также задать новые пароли для всех пользователей, относящихся к профилю, и разблокировать их для успешного входа. При ослаблении параметра сложности пароля блокировки не происходит и пользователь может зайти со своим прежним паролем.
Интеграция с ролями информационной безопасности
Для пользователей, назначенных Администраторами СУБД (qhb_dbms_admin), доступно создание, изменение, удаление и назначение профилей безопасности. Также они имеют возможность подвергнуть других пользователей блокировке и разблокированию (за исключением других суперпользователей и Администраторов СУБД).
Для пользователей, назначенных Администраторами конкретных баз данных (qhb_db_admin), не предоставляется дополнительных полномочий, таких как создание, изменение, удаление и назначение профилей безопасности.