Поиск и исправление ошибочных записей в системных таблицах
Функциональность доступна только для редакций Enterprise и Enterprise для ERP-систем.
Консольное приложение admin_protection_corrector предназначено для автоматического поиска и удаления устаревших записей в системных таблицах СЗИ (система защиты информации), тем самым уменьшая потенциальное негативное влияние на работу функциональности «Защита данных от привилегированного пользователя».
Установка
Для работы с утилитой требуется установить rpm/deb-пакет компонента pangolin-security-utilities.
В случаеавтоматизированной установки СУБД данный пакет устанавливается по умолчанию.
- SberLinux, РЕД ОС, CentOS
- Astra Linux
- Альт СП
sudo dnf install pangolin-security-utilities-{product_version}-{OS}.x86_64.rpm
sudo apt install pangolin-security-utilities-{product_version}_amd64.deb
sudo apt-get install pangolin-security-utilities-{product_version}-{OS}.x86_64.rpm
Пример заполненной команды:
cd distributive/utilities
sudo dnf install -y pangolin-security-utilities-6.7.0-sberlinux9.x86_64.rpm
Функциональные возможности
Приложение выполняет следующие действия:
-
Осуществляет проверки и составляет списки:
- Объектов, поставленных под защиту, при этом сами объекты отсутствуют в БД.
- Грантов на политики, назначенных отсутствующим пользователям.
- Грантов на политики, для которых отсутствует политика (также учитываются политики, которые будут удалены при выполнении работы приложения).
- Атрибутов объектов
pr_object_attr, отсутствующих вpr_object. - Защищенных объектов, для которых отсутствует
pr_object_kind. - Действий (
pr_action), для которых отсутствуетpr_object_kind. - Правил (
pr_rule), для которых отсутствует действие (pr_action) (также учитываются действия, которые будут удалены при выполнении работы приложения). - Правил (
pr_rule), для которых отсутствует политика (pr_policy) (также учитываются политики, которые будут удалены при выполнении работы приложения). - Правил (
pr_rule), для которых отсутствует защищенный объект (pr_object) (также учитываются объекты, которые будут удалены при выполнении работы приложения). - Атрибутов политик
pr_policy_attr, для которых отсутствует политика. - Политик
pr_policy, для которых отсутствуют атрибутыpr_policy_attr. - Объектов
pr_object, для которых отсутствуют атрибутыpr_object_attr. - Объектов
pr_object, для которых отсутствует БДdatoid, при этом0— валидный OID. - Объектов, для которых атрибут
stateroleсодержит OID удаленной роли. - Политик, для которых атрибут
stateroleсодержит OID удаленной роли. - Недостающих записей в таблице
pr_action. - Недостающих записей в таблице
pr_object_kind. - Недостающих записей в таблице
pg_proc(только функции защиты).
-
Формирует список найденных ошибок и выводит его:
- по умолчанию — в формате JSON;
- при использовании
--human-output— в альтернативном, человеко-читаемом виде.
-
При использовании аргумента
--dry-runвыполнение приложения завершается. -
Приложение запрашивает подтверждение для удаления ошибочных записей (при использовании аргумента
--forceподтверждение не запрашивается). -
Приложение вызывает функции:
pm_get_protection_errorsдля получения недостающих записей вpr_action,pr_object_kindиpg_proc.pm_remove_orphaned_entryдля найденных записей (пункты 1.1 – 1.13). При этом проверяется аргумент--force-remove-predef. Если аргумент не установлен, тогда для записей, у которых полеispredef = true, функция не вызывается.pm_fix_orphaned_object_stateдля найденных записей (пункт 1.14).pm_fix_orphaned_policy_stateдля найденных записей (пункт 1.15).pm_upgrade_protectionдля найденных записей (пункты 1.16 – 1.18) при условии, что указан аргумент--force-fix-predef.
-
Приложение завершает работу. Решение не требует перезапуска СУБД.
Настройка
Поддерживаемые аргументы
Обязательные аргументы:
-u, --username
Имя пользователя — администратора безопасности.
-w, --password
Пароль пользователя — администратора безопасности.
При отключенной функциональности «Защита данных от привилегированных пользователей» подключение происходит от суперпользователя.
-p, --port
Порт, на котором запущен экземпляр СУБД.
По умолчанию имя пользователя, пароль и порт получаются из переменных окруженияPGUSER, PGPASSWORD и PGPORT.
Если аргументы не указаны, а переменные окружения отсутствуют, утилита запрашивает недостающие данные у пользователя.
Необязательные аргументы:
--force-fix-predef
Обновляет таблицы СЗИ и pg_proc в части функций защиты.
Влияние аргумента--force-fix-predef:
- не влияет на отображение выводимых данных: выводятся предопределенные объекты и политики содержащие ошибки и зависимые от них гранты и правила;
- при указании аргумента происходит удаление ошибочных записей и зависимых от них грантов и правил;
- происходит обновление таблиц СЗИ
pr_actionиpr_object_kindи таблицpg_proc(в части функций защиты) до текущей версии СУБД.
--force
Режим без запроса подтверждения.
--dry-run
Режим отображения невалидных записей без их фактического исправления.
--human-output
Выводит информацию о невалидных записях в человеко-читаемом формате.
Поддерживаемые функции
В приложении реализованы следующие функции защиты:
pm_remove_orphaned_entry(name table_name, oid entry_oid, bool force_remove_predef)– удаляет из таблицы защитыtable_nameзапись сoidentry_oid. Если параметрforce_remove_predefравенfalseиtable_nameявляетсяpr_object,pr_object_attrилиpr_policy, производится дополнительная проверка поляispredef. Еслиispredefравенtrue, запись не удаляется.pm_fix_orphaned_object_state(Oid entry_oid)– устанавливает в таблицеpr_object_attrполяstateиstateroleв0при условии, что полеstateroleсодержитoidудаленного пользователя.pm_fix_orphaned_policy_state(Oid entry_oid)– устанавливает в таблицеpr_policy_attrполяstateиstateroleв0при условии, что полеstateroleсодержитoidудаленного пользователя.pm_get_protection_errors- отображает недостающие записи из таблицыtable_name. Функция работает только с таблицамиpr_action,pr_object_kindиpg_proc(только функции защиты).pm_upgrade_protection- восстанавливает отсутствующие записи для таблицpr_action,pr_object_kindиpg_proc(только функции защиты).
Управление
Режимы работы
Поддерживаемые режимы:
--dry-run– отображает ошибки, не меняет данные.--force– выполняет исправления без запроса подтверждения.--human-output– отображает ошибки в человеко-понятном формате, вместо JSON.
Формат вывода результатов
Результат работы приложения выводится в формате JSON.
Пример
{
"mode": "dry-run",
"status": "fail",
"run_status": "success",
"error_message": "orphaned entries found",
"repair_required": "yes",
"repair_level_force_required": "yes",
"total_errors": 3,
"errors":
{
"orphaned_objects": 1,
"orphaned_policies": 0,
"orphaned_grants": 0,
"orphaned_object_attributes": 0,
"orphaned_actions": 0,
"orphaned_rules": 0,
"orphaned_policy_attributes": 0,
"not_existing_actions": 1,
"not_existing_object_kinds": 1
},
"not_existing_object_kinds":
[
{
"oid": 9966,
"name": "view"
}
],
"not_existing_actions":
[
{
"oid": 9933,
"name": "delete",
"object_kind": 9969
}
],
"orphaned_objects":
{
"db2":
[
{
"oid": 9879,
"kind": "function",
"proname": "pm_disable_protection",
"error": "not exists"
}
]
}
}
Описание полей:
-
mode– содержит информацию, в каком режиме запущена утилита:dry-runилиfull; -
status– состояние БД:success– БД функционирует корректно;fail– БД требует обслуживания утилитойadmin_protection_corrector;unknown– статус неизвестен, так как процесс отменен пользователем или завершился неудачей;
-
run_status– состояние работы утилиты:success– выполняется успешно;fail– завершено неудачей, либо отменено пользователем;
-
error_message- сообщение о завершении выполнения. Может содержать ошибки подключения к БД, ошибки выполнения функций, а также:orphaned_entries_found- найдены ошибки в таблицах СЗИ;cancelled by user- отменена пользователем;orphaned entries corrected- ошибочные записи исправлены;non predefined orphaned entries corrected- ошибочные записи исправлены, кроме предопределенных. К предопределенным записям также относятся записи в таблицахpr_action,pr_object_kind,pg_proc(с признакомispredef) иpr_policy(с признакомispredef);
-
repair_required– требуется коррекция данных (yes/no); -
repair_level_force_required– для полной коррекции (с обновлениемpr_action,pr_object_kind,pg_procи коррекцией предопределенных объектов) требуется использование аргумента--force-fix-predef(yes/no); -
total_errors- содержит общее количество ошибок; -
errors- содержит количество ошибок по типам.
Описание полей ошибок:
-
orphaned_objects– содержит базы данных и соответствующие им массивы записей защищенных объектов с найденными ошибками. Такие записи содержат поля таблицыpr_object:-
oid–oidзапись таблицыpr_object; -
kind– тип объекта из таблицыpr_object_kind; -
ispredef– признак, что объект/политика предопределены (из таблицыpr_object_attr); -
proname– имя функции, которая отсутствуют вpg_proc; -
error– содержится информация, чего именно не хватает для того, что бы запись была корректной:object– в БД отсутствует защищаемый объект;database– отсутствует БД в которой должен находиться защищаемый объект;attribute– в таблицеpr_object_attrотсутствует соответствующая запись;kind– в таблицеpr_object_kindотсутствует соответствующий тип объекта;
-
-
orphaned_policies– содержит список политик (pr_policy), для которых не найдены соответствующие записи вpr_policy_attr; -
orphaned_grants– содержит список грантов (pr_grant), для которых обнаружены несоответствия:role– указана несуществующая роль;policy– указана несуществующая политика;
-
orphaned_object_attributes– содержит ошибочные записи в таблицеpr_object_attr:role- указан отсутствующий пользователь;
Если объект содержит только
oidзаписи – отсутствует соответствующая запись вpr_object. -
orphaned_actions– содержит записиpr_actionдля которых указаны несуществующие записиpr_object_kind; -
orphaned_rules– содержит записи, для которых найдены следующие несоответствия:policy– указана несуществующая политика;object– указан несуществующий объект;action– указано несуществующее действие;
-
orphaned_policy_attributes– содержит записи для которых:role- указана несуществующая роль.
Если объект содержит только
oidзаписи – отсутствует соответствующая запись вpr_policy. -
not_existing_object_kinds– отсутствующие записи в таблицеpr_object_kind:oid–oidзапись таблицыpr_object_kind;name– тип объекта;
-
not_existing_actions– отсутствующие записи в таблицеpr_action:oid–oidзаписьpr_action;name– действие;object_kind–oidтипа объекта.
Примеры использования
Выполнение в режиме отображения ошибки, без изменения данных:
admin_protection_corrector -u sec_admin -p 5433 --dry-run
Выполнение с подавлением запроса подтверждения:
admin_protection_corrector -u sec_admin -w password -p 5433 --force
Выполнение с аргументом --force-predef-remove:
admin_protection_corrector -u sec_admin -p 5433 --force-predef-remove