Trouver les privilèges inutilisés avec privilege analysis
OracleSécuritéCommande
-- 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');Ce que fait la commande
Privilege analysis enregistre à l'exécution quels privilèges système/objet sont réellement utilisés dans la portée choisie (base entière, rôle, condition) ; le résultat liste les privilèges inutilisés afin de planifier des REVOKE selon le principe du moindre privilège.
Quand l'utiliser
Lors du nettoyage de comptes applicatifs ayant des privilèges DBA/ANY, pour les revues de privilèges avant un audit, et pour savoir ce dont un progiciel a réellement besoin.
Attention
Inclus dans Enterprise Edition depuis 2018 (exigeait auparavant une licence Database Vault) ; aucune licence supplémentaire. La capture entraîne une légère surcharge. Le résultat ne reflète que la charge de la fenêtre de capture : si les traitements de fin de mois, de fin d'année ou d'urgence n'ont pas tourné, un privilège indiqué comme "inutilisé" peut encore être nécessaire, révoquez donc progressivement. Une seule capture peut être active à la fois ; seule exception, une capture G_DATABASE peut être activée en même temps qu'une capture de rôle ou de contexte.
Voir aussi
- Créer, ouvrir, définir la clé maître et sauvegarder un keystore TDE (19c+)
- Chiffrer des tablespaces avec TDE (nouveaux et existants, en ligne/hors ligne)
- Créer une politique Unified Auditing, l'activer sous condition, consulter les enregistrements, la supprimer
- Ajouter une politique d'accès au niveau ligne avec VPD (DBMS_RLS)
- Créer un profil de politique de mots de passe et l'attribuer aux utilisateurs