DBAtlas · Атлас эксплуатации баз данных

Найти неиспользуемые привилегии с помощью privilege analysis

OracleБезопасность

Команда

-- 1) Capture privilege usage for a specific user:
BEGIN
  DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE(
    name        => 'CAP_APP_USER',
    description => 'Actual privilege usage of the application user',
    type        => DBMS_PRIVILEGE_CAPTURE.G_CONTEXT,
    condition   => 'SYS_CONTEXT(''USERENV'',''SESSION_USER'') = ''CUSTOMER_APP''');
  DBMS_PRIVILEGE_CAPTURE.ENABLE_CAPTURE(name => 'CAP_APP_USER', run_name => 'RUN_2026_10');
END;
/
-- Other types: G_DATABASE (whole DB), G_ROLE (roles => role_name_list('DBA')), G_ROLE_AND_CONTEXT

-- 2) After a representative workload (including month end), stop and generate results:
BEGIN
  DBMS_PRIVILEGE_CAPTURE.DISABLE_CAPTURE(name => 'CAP_APP_USER');
  DBMS_PRIVILEGE_CAPTURE.GENERATE_RESULT(name => 'CAP_APP_USER', run_name => 'RUN_2026_10');
END;
/

-- 3) Used and never-used privileges:
SELECT username, sys_priv, obj_priv, object_owner, object_name, used_role
FROM   dba_used_privs   WHERE capture = 'CAP_APP_USER';
SELECT username, sys_priv, obj_priv, object_owner, object_name
FROM   dba_unused_privs WHERE capture = 'CAP_APP_USER';

-- 4) Through which role chain was the privilege used?
SELECT username, sys_priv, used_role, path
FROM   dba_used_sysprivs_path WHERE capture = 'CAP_APP_USER';

-- 5) Cleanup:
EXEC DBMS_PRIVILEGE_CAPTURE.DROP_CAPTURE(name => 'CAP_APP_USER');

Что делает

Privilege analysis во время работы фиксирует, какие системные/объектные привилегии фактически используются в выбранной области (вся база, роль, условие); результат выводит неиспользуемые привилегии, чтобы спланировать REVOKE по принципу наименьших привилегий.

Когда использовать

При чистке учётных записей приложений с привилегиями DBA/ANY, при пересмотре привилегий перед аудитом и чтобы выяснить, что действительно нужно коробочному приложению.

Внимание

Входит в Enterprise Edition с 2018 года (ранее требовалась лицензия Database Vault); дополнительная лицензия не нужна. Во время сбора есть небольшие накладные расходы. Результат отражает только нагрузку в окне сбора: если задания конца месяца, конца года или аварийные задания не выполнялись, привилегия, показанная как "неиспользуемая", может всё же быть нужна, поэтому отзывайте постепенно. Одновременно может быть включён только один сбор; единственное исключение — сбор G_DATABASE можно включить вместе с одним сбором по роли или контексту.

Открыть в DBAtlas →

Связанные материалы