Перейти к основному содержимому

Поиск и исправление ошибочных записей в системных таблицах

Сведения

Функциональность доступна только для редакций Enterprise и Enterprise для ERP-систем.

Консольное приложение admin_protection_corrector предназначено для автоматического поиска и удаления устаревших записей в системных таблицах СЗИ (система защиты информации), тем самым уменьшая потенциальное негативное влияние на работу функциональности «Защита данных от привилегированного пользователя».

Установка

Для работы с утилитой требуется установить rpm/deb-пакет компонента pangolin-security-utilities.

Сведения

В случаеавтоматизированной установки СУБД данный пакет устанавливается по умолчанию.

sudo dnf 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

Функциональные возможности

Приложение выполняет следующие действия:

  1. Осуществляет проверки и составляет списки:

    1. Объектов, поставленных под защиту, при этом сами объекты отсутствуют в БД.
    2. Грантов на политики, назначенных отсутствующим пользователям.
    3. Грантов на политики, для которых отсутствует политика (также учитываются политики, которые будут удалены при выполнении работы приложения).
    4. Атрибутов объектов pr_object_attr, отсутствующих в pr_object.
    5. Защищенных объектов, для которых отсутствует pr_object_kind.
    6. Действий (pr_action), для которых отсутствует pr_object_kind.
    7. Правил (pr_rule), для которых отсутствует действие (pr_action) (также учитываются действия, которые будут удалены при выполнении работы приложения).
    8. Правил (pr_rule), для которых отсутствует политика (pr_policy) (также учитываются политики, которые будут удалены при выполнении работы приложения).
    9. Правил (pr_rule), для которых отсутствует защищенный объект (pr_object) (также учитываются объекты, которые будут удалены при выполнении работы приложения).
    10. Атрибутов политик pr_policy_attr, для которых отсутствует политика.
    11. Политик pr_policy, для которых отсутствуют атрибуты pr_policy_attr.
    12. Объектов pr_object, для которых отсутствуют атрибуты pr_object_attr.
    13. Объектов pr_object, для которых отсутствует БД datoid, при этом 0 — валидный OID.
    14. Объектов, для которых атрибут staterole содержит OID удаленной роли.
    15. Политик, для которых атрибут staterole содержит OID удаленной роли.
    16. Недостающих записей в таблице pr_action.
    17. Недостающих записей в таблице pr_object_kind.
    18. Недостающих записей в таблице pg_proc (только функции защиты).
  2. Формирует список найденных ошибок и выводит его:

    • по умолчанию — в формате JSON;
    • при использовании --human-output — в альтернативном, человеко-читаемом виде.
  3. При использовании аргумента --dry-run выполнение приложения завершается.

  4. Приложение запрашивает подтверждение для удаления ошибочных записей (при использовании аргумента --force подтверждение не запрашивается).

  5. Приложение вызывает функции:

    1. pm_get_protection_errors для получения недостающих записей в pr_action, pr_object_kind и pg_proc.
    2. pm_remove_orphaned_entry для найденных записей (пункты 1.1 – 1.13). При этом проверяется аргумент --force-remove-predef. Если аргумент не установлен, тогда для записей, у которых поле ispredef = true, функция не вызывается.
    3. pm_fix_orphaned_object_state для найденных записей (пункт 1.14).
    4. pm_fix_orphaned_policy_state для найденных записей (пункт 1.15).
    5. pm_upgrade_protection для найденных записей (пункты 1.16 – 1.18) при условии, что указан аргумент --force-fix-predef.
  6. Приложение завершает работу. Решение не требует перезапуска СУБД.

Настройка

Поддерживаемые аргументы

Обязательные аргументы:

-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 запись с oid entry_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:

    • oidoid запись таблицы 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:

    • oidoid запись таблицы pr_object_kind;
    • name – тип объекта;
  • not_existing_actions – отсутствующие записи в таблице pr_action:

    • oidoid запись pr_action;
    • name – действие;
    • object_kindoid типа объекта.

Примеры использования

Выполнение в режиме отображения ошибки, без изменения данных:

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