Comment empêcher le verrouillage du compte utilisateur principal de mon instance de bases de données Amazon RDS for Oracle ?

Dernière mise à jour : 03/06/2022

Je veux empêcher le verrouillage du compte utilisateur principal de mon instance de bases de données Amazon Relational Database Services (Amazon RDS) for Oracle.

Résolution

Le compte utilisateur principal dans Amazon RDS est essentiel à la surveillance, à la gestion et à l'exécution des tâches administratives pour faire fonctionner votre instance de bases de données. Ce compte est votre premier compte de base de données, et il inclut les rôles et privilèges administratifs nécessaires à la maintenance et au fonctionnement de votre base de données. Pour obtenir la liste complète des privilèges et des rôles que l'utilisateur principal obtient pour chaque moteur de base de données, consultez Privilèges du compte utilisateur principal. Si le compte utilisateur principal est verrouillé et que vous ne parvenez pas à vous connecter, vos capacités d'administration sont perturbées et vos opérations commerciales critiques peuvent être affectées. Vous pouvez utiliser la console Amazon RDS ou un autre compte de base de données pour accéder à nouveau à votre compte principal.

Identification de la cause racine

L'une des raisons courantes du verrouillage du compte utilisateur principal est l'application de paramètres de profil personnalisés au compte principal. Certains de ces paramètres sont les suivants :

  • FAILED_LOGIN_ATTEMPTS : lorsque le nombre d'échecs consécutifs de tentatives de connexion au compte principal dépasse la valeur définie pour ce paramètre, le compte est verrouillé.
  • PASSWORD_LIFE_TIME : lorsque la durée d'utilisation d'un mot de passe dépasse la valeur définie pour ce paramètre, vous ne pouvez pas vous connecter au compte en utilisant ce mot de passe et le compte est marqué comme expiré. Vous devez réinitialiser le mot de passe pour vous connecter à nouveau. Si vous définissez une valeur pour PASSWORD_GRACE_TIME et que le mot de passe n'est pas modifié dans le délai de grâce, le mot de passe expire et les connexions ultérieures sont rejetées.
  • INACTIVE_ACCOUNT_TIME : si le compte principal ne se connecte pas à la base de données pendant le nombre de jours consécutifs défini par ce paramètre, alors le compte est verrouillé. La valeur minimale de ce paramètre est de 15 jours. Il n'y a pas de valeur maximale.

Pour plus d'informations sur les paramètres de mot de passe, consultez la documentation Oracle pour password_parameters.

Exécutez la requête suivante pour vérifier les paramètres de profil actuels du compte utilisateur principal afin d'identifier la raison pour laquelle le compte est verrouillé :

SELECT
    profile,
    resource_name,
    limit
FROM
    dba_profiles
WHERE
    resource_type = 'PASSWORD'
    AND   profile IN (
        SELECT
            profile
        FROM
            dba_users
        WHERE
            username = 'EXAMPLE-MASTER-USERNAME'
    );

Exemples :

Supposons que vous créez un profil avec le paramètre FAILED_LOGIN_ATTEMPTS qui n'autorise qu'une seule entrée de mot de passe incorrect.

SQL> CREATE PROFILE sec_profile LIMIT FAILED_LOGIN_ATTEMPTS 1;
Profile created.

Vous pouvez appliquer ce profil à l'utilisateur principal en exécutant la requête suivante :

SQL> ALTER USER EXAMPLE-MASTER-USERNAME PROFILE sec_profile;
User altered.

Déconnectez-vous de la base de données et quittez SQL*Plus :

SQL> exit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.12.0.0.0

Connectez-vous au compte avec le mot de passe incorrect :

bash-4.2$ sqlplus EXAMPLE-MASTER-USERNAME@ora
SQL*Plus: Release 19.0.0.0.0 - Production on Tue Sep 14 13:16:33 2021
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
ERROR:
ORA-01017: invalid username/password; logon denied

Les autres connexions ne sont pas autorisées car FAILED_LOGIN_ATTEMPTS est défini sur 1. Au lieu de cela, vous obtenez le message d'erreur suivant :

bash-4.2$ sqlplus EXAMPLE-MASTER-USERNAME@ora
SQL*Plus: Release 19.0.0.0.0 - Production on Tue Sep 14 13:16:44 2021
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
ERROR:
ORA-28000: The account is locked.

Lorsque le compte principal est limité par le paramètre PASSWORD_LIFE_TIME, et que la durée d'utilisation du même mot de passe dépasse la valeur définie pour ce paramètre, vous obtenez le message d'erreur ci-dessous lorsque vous essayez de vous connecter :

-bash-4.2$ sqlplus EXAMPLE-MASTER-USERNAME@ora
SQL*Plus: Release 19.0.0.0.0 - Production on Tue Sep 14 20:14:03 2021
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
ERROR:
ORA-28001: the password has expired

Déverrouillage du compte principal

Vous pouvez déverrouiller le compte principal en utilisant l'une des méthodes suivantes :

En utilisant la console Amazon RDS ou l'AWS Command Line Interface (AWS CLI)

En réinitialisant le mot de passe, vous pouvez déverrouiller le compte et rouvrir le compte après expiration. Pour plus d'informations, consultez Comment réinitialiser le mot de passe de l'utilisateur principal pour mon instance de base de données Amazon RDS afin de déverrouiller l'utilisateur principal ?

En utilisant un autre compte de base de données

Si vous avez déjà un autre compte de base de données (par exemple, EXAMPLE-USER) avec le privilège ALTER USER, vous pouvez utiliser ce compte pour déverrouiller le compte utilisateur principal.

Identifiez les comptes disposant du privilège ALTER USER en exécutant la requête suivante :

SELECT
    grantee,
    privilege
FROM
    dba_sys_privs
WHERE
    privilege = 'ALTER USER'
    AND grantee IN (
        SELECT
            username
        FROM
            dba_users
        WHERE
            oracle_maintained = 'N'
    );

Le résultat doit être similaire au suivant :

GRANTEE                                                                     PRIVILEGE
--------------------------------------------------------------------------------------------------------------------------------
EXAMPLE-USER                                                                ALTER USER

Exécutez la requête suivante pour identifier les comptes pour lesquels le privilège est accordé via un rôle :

SELECT DISTINCT
    dba_users.username
FROM
    dba_role_privs
    JOIN dba_users ON dba_role_privs.grantee = dba_users.username
                      AND granted_role IN (
        SELECT
            role
        FROM
            role_sys_privs
        WHERE
            privilege = 'ALTER USER'
    )
        AND dba_users.oracle_maintained = 'N'

Le résultat doit être similaire au suivant :

USERNAME
-----------------------------------------------------------------------------------
EXAMPLE-MASTER-USERNAME
RDSADMIN
USER1
EXAMPLE-USER

Remarque : ignorez RDSADMIN de la sortie car il s'agit d'un compte interne RDS.

Connectez-vous à la base de données à l'aide du compte EXAMPLE-USER :

-bash-4.2$ sqlplus EXAMPLE-USER@ora
SQL*Plus: Release 19.0.0.0.0 - Production on Tue Sep 14 13:35:55 2021 Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle.  All rights reserved.
Last Successful login time: Tue Sep 14 2021 13:33:23 +00:00
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.12.0.0.0

Déverrouillez le compte utilisateur principal en exécutant la requête suivante :

SQL> ALTER USER EXAMPLE-MASTER-USERNAME ACCOUNT UNLOCK;
User altered.

Si le mot de passe est expiré, réinitialisez-le en exécutant la requête suivante :

SQL> ALTER USER EXAMPLE-MASTER-USERNAME IDENTIFIED BY EXAMPLE-MASTER-USER-NEW-PWD;
User altered.

Déconnectez-vous de la base de données EXAMPLE-USER et quittez SQL*Plus :

SQL> exit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.12.0.0.0

Vous pouvez vous connecter avec succès avec le compte utilisateur principal. Vous obtenez le message suivant :

bash-4.2$ sqlplus EXAMPLE-MASTER-USERNAME@ora
SQL*Plus: Release 19.0.0.0.0 - Production on Tue Sep 14 13:36:36 2021
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Last Successful login time: Tue Sep 14 2021 13:35:12+00:00
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.12.0.0.0
SQL> SHOW USER;
USER is "EXAMPLE-MASTER-USERNAME"

Impossible de réinitialiser le mot de passe de votre compte principal : dans certaines situations, la réinitialisation du mot de passe de votre compte principal peut être bloquée :

Exemple 1 :

Si vous utilisez le même mot de passe pour le compte principal plus que le nombre de fois défini par le paramètre PASSWORD_REUSE_MAX, vous verrez l'événement suivant dans la console Amazon RDS :

Unable to reset your password. Error information: ORA-28007: the password cannot be reused ORA-06512: at line 1

Pour voir les derniers événements pour votre instance RDS, consultez Affichage des événements Amazon RDS.

Pour résoudre ce problème, réinitialisez le mot de passe de votre compte principal vers un nouveau mot de passe qui n'a pas été utilisé dans le passé en utilisant la console Amazon RDS. De plus, si vous avez un autre compte de base de données avec le privilège ALTER USER, vous pouvez vous connecter à ce compte et changer le mot de passe. Si cela est autorisé, modifiez le paramètre PASSWORD_REUSE_MAX du profil du compte principal sur UNLIMITED afin que vous puissiez réutiliser le mot de passe un nombre illimité de fois.

Exemple 2 :

Supposons que le compte principal possède le paramètre PASSWORD_VERIFY_FUNCTION qui vérifie des stratégies de mot de passe strictes, telles que la longueur minimale du mot de passe ou l'obligation d'utiliser le nombre minimal de caractères. Vous pouvez obtenir l'erreur suivante lorsque vous essayez de réinitialiser le mot de passe et que celui-ci ne répond pas aux règles définies :

ORA-28003: password verification for the specified password failed.

Pour résoudre ce problème, assurez-vous que les règles définies dans votre PASSOWRD_VERIFY_FUNCTION sont respectées pour le nouveau mot de passe.

Prévention du verrouillage du compte utilisateur principal

Si les stratégies de sécurité de votre organisation le permettent, évitez de définir des profils personnalisés pour votre compte utilisateur principal RDS et conservez le profil DEFAULT. Avec le profil DEFAULT, votre compte utilisateur principal bénéficie d'un nombre illimité de tentatives de connexion échouées. De plus, le mot de passe du compte utilisateur principal n'expire jamais et n'est jamais désactivé pour cause d'inactivité. Toutefois, une bonne pratique consiste à réinitialiser périodiquement le mot de passe à l'aide de la console Amazon RDS.

Vous pouvez visualiser les limites du profil DEFAULT en exécutant la requête suivante :

SELECT
   resource_name,
   limit
FROM
   dba_profiles
WHERE
   resource_type = 'PASSWORD'
   AND profile = 'DEFAULT'
   AND resource_name IN
   (
      'FAILED_LOGIN_ATTEMPTS',
      'PASSWORD_LIFE_TIME',
      'PASSWORD_VERIFY_FUNCTION',
      'INACTIVE_ACCOUNT_TIME',
      'PASSWORD_REUSE_TIME',
      'PASSWORD_REUSE_MAX'
   );

Le résultat doit être similaire au suivant :

RESOURCE_NAME                    LIMIT
-------------------------------- --------------------------------------------------------------------------------------------------------------------------------
FAILED_LOGIN_ATTEMPTS            UNLIMITED
PASSWORD_LIFE_TIME               UNLIMITED
PASSWORD_REUSE_TIME              UNLIMITED
PASSWORD_REUSE_MAX               UNLIMITED
PASSWORD_VERIFY_FUNCTION         NULL
INACTIVE_ACCOUNT_TIME            UNLIMITED

6 rows selected.

Si votre compte principal a un profil personnalisé, alors changez le compte pour utiliser le profil DEFAULT.

Vérifiez le profil actuel de votre compte principal en exécutant la requête suivante :

SELECT PROFILE FROM dba_users WHERE USERNAME = 'EXAMPLE-MASTER-USERNAME';

Modifiez le profil de votre compte principal sur DEFAULT en exécutant la requête suivante :

SQL> ALTER USER EXAMPLE-MASTER-USERNAME PROFILE default;
User altered.

Remarque : si les paramètres du mot de passe de votre profil DEFAULT ont été modifiés, réinitialisez le profil DEFAULT aux paramètres d'usine pour les paramètres qui pourraient affecter la connexion. Pour ce faire, utilisez la commande suivante :

SQL> ALTER PROFILE default LIMIT
  failed_login_attempts UNLIMITED password_life_time UNLIMITED
  inactive_account_time UNLIMITED;
Profile altered.

Si votre organisation a des stratégies qui exigent la réinitialisation du mot de passe du compte principal avec des paramètres restreints, alors assurez-vous de suivre les bonnes pratiques suivantes :

  • Réinitialisez périodiquement le mot de passe à l'aide de la console Amazon RDS avant qu'il n'expire à cause du paramètre PASSWORD_LIFE_TIME.
  • Si vous avez un paramètre PASSWORD_VERIFY_FUNCTION avec des exigences strictes pour la vérification du mot de passe, respectez ces exigences lorsque vous configurez le nouveau mot de passe.
  • Utilisez votre compte utilisateur principal en respectant le paramètre INACTIVE_ACCOUNT_TIME afin que le compte reste activé.

Suivi des tentatives de connexion échouées

Vous pouvez suivre les tentatives de connexion invalides à votre compte principal à l'aide de la fonction d'audit d'Oracle. Pour ce faire, modifiez le paramètre d'initialisation Oracle audit_trail en db pour votre instance RDS for Oracle. Vous pouvez modifier ce paramètre dans le groupe de paramètres personnalisés de l'instance de base de données.

Si votre instance RDS for Oracle utilise un groupe de paramètres par défaut, vous ne pouvez pas modifier les valeurs des paramètres. Vous devez créer un nouveau groupe de paramètres personnalisé, définir la valeur du paramètre et attacher le groupe de paramètres nouvellement créé à votre instance. Redémarrez ensuite l'instance pour associer le nouveau groupe de paramètres à l'instance. Pour plus d'informations, consultez Comment modifier les valeurs d'un groupe de paramètres de base de données Amazon RDS ?

Vous devez redémarrer votre instance RDS après avoir modifié le paramètre dans le groupe de paramètres personnalisé. En effet, le paramètre audit_trail est statique et nécessite le redémarrage de la base de données RDS for Oracle pour prendre effet. Pour plus d'informations, veuillez consulter la rubrique Redémarrage d'une instance de base de données.

Une fois que l'état de votre instance RDS devient disponible, connectez-vous à la base de données à l'aide du compte principal ou de tout compte disposant du privilège d'audit. Si vous n'avez pas encore configuré l'audit des tentatives infructueuses, exécutez la commande suivante pour activer l'audit des tentatives de connexion infructueuses :

AUDIT SESSION WHENEVER NOT SUCCESSFUL;

Exécutez ensuite la requête suivante pour suivre les tentatives de connexion infructueuses ou échouées par votre compte principal.

Remarque : vous pouvez suivre ces données pour n'importe quel compte de base de données en supprimant l’EXEMPLE-USER de la clause WHERE.

SELECT username,
       os_username,
       userhost,
       TO_CHAR(timestamp, 'MON-DD-YYYY HH24:MI:SS') what_time
FROM   dba_audit_trail
WHERE  returncode = 1017
       AND username = 'EXAMPLE-USER';

Documentation Oracle pour CREATE PROFILE


Cet article vous a-t-il été utile ?


Avez-vous besoin d'aide pour une question technique ou de facturation ?