Профили безопасности

Профили безопасности позволяют производить групповую настройку политик безопасности СУБД в отношении пользователей.

Описание таблиц

Связь пользователя с определенным профилем безопасности хранится в таблице 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) не предоставляется дополнительных полномочий, таких как создание, изменение, удаление и назначение профилей безопасности.