J’ai reçu un message d’avertissement ce matin alors que je me connectais à une base de données Oracle : “ORA-28002 : the password will expire within 7 days“. Le compte et le mot de passe de la base de données étaient toujours valides et ce message signifiait simplement qu’il était temps de changer le mot de passe pour des raisons de sécurité. Cette base de données était utilisée pour faire des tests dans une machine virtuelle et il n’y avait par conséquent pas de problème de sécurité ici. Une solution alternative consistait donc à créer un nouveau profil d’utilisateur de base de données afin de désactiver l’expiration du mot de passe. J’ai documenté comment je l’ai créé dans ce tutoriel.

Un profil d’utilisateur est associé au compte d’utilisateur de base de données lors de sa création. Ce profil définit, entre autres, les règles de gestion du mot de passe. La politique par défaut définit que les mots de passe expirent après 180 jours, et cela explique pourquoi j’avais reçu le message d’avertissement :

J’ai immédiatement changé le mot de passe de l’utilisateur (SYSTEM dans cet exemple) à l’aide de l’instruction ALTER USER :

L’expiration du mot de passe n’était pas vraiment importante dans cet environnement virtuel. J’ai donc décidé de créer un nouveau profil d’utilisateur sans expiration du mot de passe afin de pouvoir l’associer à certains utilisateurs.
J’ai d’abord demandé la liste des profils associés aux utilisateurs de la base de données à l’aide de la requête “SELECT username, profile FROM dba_users ORDER BY username;“. Comme vous pouvez le voir dans la capture d’écran suivante, tous les utilisateurs (y compris l’utilisateur SYSTEM) étaient ici associés au profil prédéfini “DEFAULT“.

J’ai utilisé la requête “SELECT RESOURCE_TYPE, RESOURCE_NAME, LIMIT from DBA_PROFILES WHERE PROFILE=’DEFAULT’;” pour voir la définition du profil utilisateur “DEFAULT“.

Ce profil avait deux types de ressources : celles de type “KERNEL” qui étaient utilisées pour spécifier les limites de ressources pour un utilisateur, et celles de type “PASSWORD” qui définissaient les règles pour le mot de passe. Les ressources de type “PASSWORD” sont les suivantes :
- FAILED_LOGIN_ATTEMPS pour spécifier le nombre maximal de tentatives de connexion infructueuses consécutives à un compte d’utilisateur avant de le verrouiller.
- PASSWORD_LIFE_TIME pour spécifier la durée de validité (en jours) d’un mot de passe.
- PASSWORD_REUSE_TIME pour spécifier le nombre de jours avant qu’un mot de passe ne puisse être réutilisé.
- PASSWORD_REUSE_MAX pour spécifier le nombre de changements de mot de passe requis avant de pouvoir réutiliser le mot de passe actuel.
- PASSWORD_VERIFY_FUNCTION pour spécifier le nom d’une fonction PL/SQL utilisée pour vérifier la complexité d’un mot de passe lorsqu’il est modifié.
- PASSWORD_LOCK_TIME pour spécifier la durée en jours du verrouillage d’un compte utilisateur après qu’il ait été bloqué du fait d’un certain nombre de tentatives de connexion infructueuses consécutives (spécifié par le paramètre FAILED_LOGIN_ATTEMPTS).
- PASSWORD_GRACE_TIME pour spécifier le nombre de jours de la période de grâce après l’expiration du mot de passe durant lesquels un avertissement est émis et la connexion est autorisée.
- INACTIVE_ACCOUNT_TIME pour spécifier le nombre de jours consécutifs d’inactivité autorisé (sans connexion au compte utilisateur) avant de le verrouiller.
Je ne souhaitais pas modifier le profil “DEFAULT” car il pourrait être modifié lors d’un changement de version du serveur de base de données. J’ai donc choisi de créer un nouveau profil qui n’aurait pas d’expiration du mot de passe en exécutant la commande suivante comme administrateur : “CREATE PROFILE C##NOPWDEXPIRATION LIMIT PASSWORD_LIFE_TIME UNLIMITED ;“. Les valeurs des autres resources utilisées par les mots de passe seraient héritées du profil DEFAULT.

Le nom du profil commençait ici par le préfixe “C##” (spécifié par le paramètre d’initialisation COMMON_USER_PREFIX), car il s’agissait d’un profil commun CDB. Si cela avait été un profil local PDB, le nom du profil n’aurait pas pu utiliser les préfixes “C##” ou “c##“. La partie “LIMIT PASSWORD_LIFE_TIME UNLIMITED” est utilisée pour désactiver l’expiration du mot de passe.
Le nouveau profil était maintenant disponible et je pouvais l’associer à un utilisateur (SYSTEM ici) avec la commande “ALTER USER SYSTEM PROFILE C##NOPWDEXPIRATION;”.

C’est très simple à faire et Il ne sera dorénavant plus obligatoire de changer le mot de passe du compte utilisateur “SYSTEM” dans cet environnement.
Clause de non-responsabilité
Cette page Comment créer un profil utilisateur Oracle 19c DB pour désactiver l'expiration du mot de passe a été initialement publiée sur MyBIJourney