Comment débloquer un compte de base de données Oracle sans changer son mot de passe

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.

Déverrouiller un compte de base de données Oracle
Déverrouiller un compte de base de données Oracle

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”) :

Impossible de démarrer un ou plusieurs serveurs
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“:

grep "ORA" AdminServer.out
grep “ORA” 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é :

SELECT username, account_status, profile FROM dba_users where username like 'BI_%' AND (account_status like '%EXPIRED%' or account_status like '%LOCKED%') ORDER BY username;
SELECT username, account_status, profile FROM dba_users where username like ‘BI_%’ AND (account_status like ‘%EXPIRED%’ or account_status like ‘%LOCKED%’) ORDER BY username;

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.

SPOOL BI_USERS.txt
SPOOL 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 :

select DBMS_METADATA.GET_DDL('USER', 'BI_PLATFORM') from dual;"
select DBMS_METADATA.GET_DDL(‘USER’, ‘BI_PLATFORM’) from dual;”

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”.

CREATE USER "BI_PLATFORM" IDENTIFIED BY VALUES "password_hash_value"
CREATE USER “BI_PLATFORM” IDENTIFIED BY VALUES “password_hash_value”

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.

ALTER USER statements
ALTER USER statements

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.

@ALTER_BI_USERS.sql
@ALTER_BI_USERS.sql

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

SELECT username, account_status, profile from dba_users;
SELECT username, account_status, profile from dba_users;

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 >” :

ALTER USER ... PROFILE C##NOPWDEXPIRATION;
ALTER USER … PROFILE C##NOPWDEXPIRATION;

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

@ALTER_BI_USERS_PROFILE.sql
@ALTER_BI_USERS_PROFILE.sql

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 :

Finished starting servers
Finished starting servers

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

Oracle BI Analytics
Oracle BI Analytics

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é

Les informations contenues dans ce site Web sont uniquement à des fins d’information générale. Nous essayons de maintenir ces informations à jour et correctes, mais nous n’offrons aucune garantie d’aucune sorte quant à l’exhaustivité, l’exactitude ou la fiabilité du contenu du site Web. En aucun cas, nous ne serons responsables de toute perte ou dommage de quelque nature que ce soit résultant de l’utilisation de ce site Web.

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

Toutes les marques déposées sont la propriété de leurs propriétaires respectifs.
FacebookTwitterPinterestWhatsAppMail