Le CIS (Center for Internet Security) publie un benchmark Oracle Database qui fait référence. Après l'avoir appliqué sur une dizaine d'instances en production, voici ma checklist synthétique des points qui ont le plus d'impact réel — sans le bruit des recommandations trop théoriques.

1. Audit unifié : activer et configurer

Oracle 19c déprécie l'audit traditionnel au profit de l'audit unifié. C'est le premier chantier.

-- Vérifier que l'audit unifié est actif
SELECT parameter, value FROM v$option
WHERE parameter = 'Unified Auditing';
-- Value = TRUE : OK

-- Politique minimale recommandée pour la production
CREATE AUDIT POLICY audit_prod_policy
  ACTIONS LOGON, LOGOFF,
         ALTER DATABASE,
         CREATE USER, ALTER USER, DROP USER,
         CREATE ROLE, DROP ROLE,
         ALTER SYSTEM;

AUDIT POLICY audit_prod_policy;

-- Audit des connexions échouées (obligatoire en France pour les SI sensibles)
AUDIT ACTIONS LOGON WHENEVER NOT SUCCESSFUL;

Piège : l'audit unifié remplit rapidement AUDSYS dans SYSAUX. Surveillez l'espace :

SELECT segment_name, bytes/1024/1024 MB
FROM dba_segments
WHERE owner = 'AUDSYS';

Prévoyez une rotation : plutôt que de désactiver, configurez audit_trail = DB, EXTENDED et une purge automatique.

2. Gestion des mots de passe

Le benchmark CIS demande des politiques de mots de passe renforcées. En pratique, voici ce que j'applique :

CREATE PROFILE cis_profile LIMIT
  FAILED_LOGIN_ATTEMPTS    5
  PASSWORD_LOCK_TIME       1
  PASSWORD_LIFE_TIME       90
  PASSWORD_GRACE_TIME      7
  PASSWORD_REUSE_TIME      365
  PASSWORD_REUSE_MAX       5
  PASSWORD_VERIFY_FUNCTION ora12c_verify_function;

ALTER USER SYSTEM PROFILE cis_profile;
ALTER USER SYS   PROFILE cis_profile;

Important : n'appliquez JAMAIS de口令 expiration à SYS et SYSTEM sans avoir un plan de contournement (gestion des accès d'urgence). Je garde SYS en profil DEFAULT et je verrouille l'accès OS via l'authentification système.

3. Restreindre les privilèges inutiles

C'est là où je vois le plus d'écarts chez mes clients.

-- Qui a le droit SYSDBA en dehors de SYS ?
SELECT grantee, privilege
FROM dba_sys_privs
WHERE privilege = 'SYSDBA'
  AND grantee != 'SYS';

-- Qui peut accéder aux dictionnaires sensibles ?
SELECT grantee, privilege
FROM dba_sys_privs
WHERE privilege IN ('SELECT ANY DICTIONARY', 'EXEMPT ACCESS POLICY');

Règle : pas plus de 3 personnes avec SYSDBA dans une équipe DBA. Pour les opérations courantes, créez des rôles spécifiques :

CREATE ROLE role_dba_oper;
GRANT CREATE SESSION, ALTER SYSTEM, ALTER DATABASE TO role_dba_oper;
GRANT SELECT ANY DICTIONARY TO role_dba_oper;

4. Sécuriser le réseau

Oracle écoute sur 1521 par défaut. Les bonnes pratiques CIS applicables en production :

# sqlnet.ora
SQLNET.ENCRYPTION_SERVER = REQUIRED
SQLNET.ENCRYPTION_TYPES_SERVER = (AES256, AES128)
SQLNET.ALLOWED_LOGON_VERSION_SERVER = 12
VALIDATE_NOSYSTEMPWD = YES

# listener.ora
ADMIN_RESTRICTIONS_LISTENER = ON
LOGGING_LISTENER = ON

Le paramètre qui m'a sauvé une fois : VALIDATE_NOSYSTEMPWD = YES empêche les connexions SYS sans mot de passe via l'authentification OS distante. Un audit de sécurité l'avait signalé, je l'ai appliqué, et ça a bloqué une tentative d'accès non autorisée le mois suivant.

5. Verrouiller les comptes par défaut

C'est basique mais encore trop souvent oublié :

-- Lister les comptes ouverts par défaut
SELECT username, account_status, profile
FROM dba_users
WHERE oracle_maintained = 'Y'
  AND account_status = 'OPEN';

-- Verrouiller les comptes inutiles
ALTER USER DBSNMP   ACCOUNT LOCK;
ALTER USER XDB      ACCOUNT LOCK;
ALTER USER OUTLN    ACCOUNT LOCK;
ALTER USER APPQOSSYS ACCOUNT LOCK;

Exception : ne verrouillez pas DBSNMP si vous utilisez Oracle Enterprise Manager. Vérifiez d'abord.

6. Permissions des fichiers binaires Oracle

CIS demande des permissions restrictives sur les fichiers Oracle. Sous Linux/Unix :

# Vérifier les permissions Oracle Home
find $ORACLE_HOME -type f -perm /o+w -ls | wc -l
# Devrait être 0

# Vérifier les fichiers setuid
find $ORACLE_HOME -type f -perm -4000 -ls

# Vérifier que les fichiers de logs ne sont pas lisibles par tous
ls -la $ORACLE_BASE/diag/rdbms/*/trace/alert_*.log

Checklist résumée applicable en 1h

-- 1. Audit
SELECT * FROM unified_audit_trail WHERE event_timestamp > SYSTIMESTAMP - 1;

-- 2. Comptes ouverts
SELECT username FROM dba_users WHERE account_status = 'OPEN';

-- 3. Privilèges élevés
SELECT * FROM v$pwfile_users;

-- 4. Paramètres réseau
SHOW PARAMETER remote_login_passwordfile;
SHOW PARAMETER os_authent_prefix;

-- 5. Versions Oracle autorisées
SHOW PARAMETER sec_protocol_error_trace_action;

À retenir : le CIS Benchmark fait 200+ pages. Appliquez d'abord les 20% qui couvrent 80% des risques : audit, mots de passe, privilèges, réseau. Le reste viendra dans un second temps.

Yacine Oumghar · DBA Oracle depuis 1998 Retour au blog