Encontrar privilegios no usados con privilege analysis
OracleSeguridadComando
-- 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');Qué hace
Privilege analysis registra en tiempo de ejecución qué privilegios de sistema/objeto se usan realmente dentro del alcance elegido (toda la base de datos, rol, condición); el resultado lista los privilegios no usados para planificar los REVOKE según el principio de mínimo privilegio.
Cuándo usarlo
Al limpiar cuentas de aplicación con privilegios DBA/ANY, para revisiones de privilegios antes de una auditoría y para averiguar qué necesita realmente una aplicación empaquetada.
Precaución
Incluido en Enterprise Edition desde 2018 (antes requería licencia de Database Vault); sin licencia adicional. Hay una pequeña sobrecarga durante la captura. El resultado refleja solo la carga de trabajo de la ventana de captura: si no se ejecutaron los jobs de fin de mes, fin de año o de emergencia, un privilegio mostrado como "no usado" puede seguir siendo necesario, así que revoque gradualmente. Solo se puede habilitar una captura a la vez; la única excepción es que una captura G_DATABASE puede habilitarse junto con una captura de rol o de contexto.
Relacionado
- Crear, abrir, definir la master key y hacer backup de un keystore TDE (19c+)
- Cifrar tablespaces con TDE (nuevos y existentes, online/offline)
- Crear una política de Unified Auditing, habilitarla de forma condicional, revisar los registros y eliminarla
- Añadir una política de acceso a nivel de fila con VPD (DBMS_RLS)
- Crear un profile de política de contraseñas y asignarlo a usuarios