Il est parfois nécessaire de déverrouiller un compte de base de données Oracle sans réinitialiser son mot de passe. Le paquet “DBMS_metadata” peut être utilisé pour récupérer le “hachage” d’un mot de passe afin de déverrouiller un compte. Nous allons voir comment je l’ai fait dans ce tutoriel.

J’étais en train de démarrer les serveurs Oracle BI ce matin lorsque j’ai reçu un message d’erreur “Failed to start one or more Servers (return 3)” (“Impossible de démarrer un ou plusieurs serveurs”) :

Tout fonctionnait parfaitement auparavant et je n’avais pas modifié la configuration du serveur récemment. J’étais perplexe et j’ai décidé de vérifier si il y avait des messages d’erreur “ORA” dans le fichier “AdminServer.out“:

L’origine du problème était clairement identifiée par les lignes “java.sql.SQLException : ORA-28001 : the password has expired” : les mots de passe de certains comptes de base de données avaient expiré. Je me suis rappelé que j’avais modifié il y a quelques semaines le mot de passe du compte DB “system” après avoir reçu un message d’avertissement “ORA-28002 : the password will expire within 7 days” (le mot de passe expirera dans les 7 jours). La même chose se produisait certainement maintenant avec les comptes utilisés par l’installation du serveur Oracle BI. Vous pouvez voir comment j’ai créé un profil utilisateur Oracle 19c DB pour désactiver l’expiration du mot de passe en cliquant ce lien.
J’ai utilisé sqlplus pour me connecter à l’instance de base de données Oracle en tant que sysdba. J’ai sélectionné la PDB utilisée par le serveur Oracle BI et j’ai demandé si il y avait des utilisateurs “BI” (le préfixe que j’avais choisi lors de l’installation) avec un mot de passe expiré :

Comme vous pouvez le voir dans la capture d’écran précédente, sept comptes “BI” de la base de données avaient un mot de passe expiré. C’est quelque chose qui est généralement résolu en déverrouillant les comptes DB avec des nouveaux mots de passe. Malheureusement, ces comptes avaient été créés lors de l’installation et de la configuration initiales du serveur Oracle BI et je n’étais pas sûr de pouvoir modifier facilement la configuration du serveur Oracle BI avec les nouveaux mots de passe. Une autre solution consistait à déverrouiller ces comptes en réutilisant leurs mots de passe actuels. Mais il fallait pour cela connaître ces mots de passe.
Heureusement, il y avait une autre solution : je pouvais utiliser “DBMS_METADATA.GET_DDL()” pour obtenir la définition des comptes de base de données qui incluait le “hachage” des mots de passe. Je pouvais ensuite utiliser ces “hachage” pour modifier les comptes de base de données sans connaitre leurs mots de pase. Je voulais conserver les “hachages” dans un fichier texte afin de pouvoir les utiliser. J’ai modifié les paramètres suivants pour éviter qu’ils soient stockés sur plusieurs lignes et j’ai sauvegardé les réponses des requêtes dans le fichier BI_USERS.txt.

J’ai exécuté la requête “select DBMS_METADATA.GET_DDL(‘USER’, ‘username’) from dual;” pour les sept comptes de base de données “BI” verrouillés. La chaine de caractères après le “IDENTIFIED BY VALUES” correspond au hachage du mot de passe :

J’ai ouvert avec un éditeur le fichier BI_USERS.txt qui avait été généré et j’ai copié les lignes “CREATE USER … IDENTIFIED BY VALUES” avec les hachages des mots de passe dans un nouveau fichier que j’ai nommé “ ALTER_BI_USERS.sql”.

J’ai remplacé les requêtes “CREATE USER” par des requêtes “ALTER USER” dans ce fichier et je l’ai enregistré sous ALTER_BI_USERS.sql.

J’ai exécuté le fichier en tant que SYSDBA pour déverrouiller les sept utilisateurs BI en réutilisant les hachages de leur mots de passe actuels.

J’ai vérifié que les comptes étaient effectivement déverrouillés :

J’ai décidé d’associer ces comptes au profil NOPWDEXPIRATION que j’avais créé dans un tutoriel précédent afin d’éviter que les mots de passe des comptes n’expirent à l’avenir. J’ai créé un petit fichier ALTER_BI_USERS_PROFILE.sql avec les requêtes “ALTER USER … PROFILE C##NOPWDEXPIRATION;” pour associer ce profil aux comptes “BI</strong >” :

J’ai exécuté le fichier en tant que SYSDBA :

J’ai redémarré les serveurs Oracle BI et au bout de quelques minutes j’ai eu la confirmation qu’ils avaient bien démarré cette fois :

J’ai ouvert un navigateur Web et je me suis connecté à Oracle BI Analytics pour faire une dernière vérification :

Tout fonctionnait bien de nouveau, parfait !
Conclusion : n’oubliez pas de désactiver la politique d’expiration des mots de passe pour les comptes de base de données BI créés lors de l’installation et la configuration d’un serveur Oracle BI !
Clause de non-responsabilité
Cette page Comment débloquer un compte de base de données Oracle sans changer son mot de passe a été initialement publiée sur MyBIJourney