Gérer les utilisateurs expirés et/ou lockés (expired and locked users)

Vous avez un environnement en place, et vous rencontrez régulièrement des problèmes avec des utilisateurs qui sont expirés / lockés ? Vous n’êtes pas DBA, et généralement ce genre de problèmes vous bloque au moment le plus inopportun (la loi de Murphy…). Voici un petit article qui vous permettra de mettre au moins ce problème de côté.

Les raisons

L’expiration et le bloquage des utilisateurs est un mécanisme important pour la sécurisation, mais dans certains cas, la sécurisation n’a pas d’intérêt.
Dans mon cas particulier, je rencontrais ce problème de manière récurrente sur des VMs que j’utilisais pour effectuer des tests, reproduire des problèmes. Et forcément quand on a un environnement opérationnel, il est toujours gênant de perdre du temps sur des détails tel que les expirations d’utilisateurs, surtout quand on souhaite rapidement faire un test.
Cela peut aussi vous arriver sur des environnements de développements, et vous bloquer, généralement quand un bug ultra critique est à corriger dans les meilleurs délais…
On est d’accord que dans ces contextes… l’expiration ne peut finalement que vous apporter des problèmes, sans justification de sécurisation.

Manipuler les utilisateurs

Tout d’abord, il vous faudra un accès en tant qu’administrateur de la base pour pouvoir manipuler les utilisateurs et les configurations.
Une fois connecté, vous pourrez visualiser dans quel état sont vos utilisateurs, et confirmer qu’ils ont un mot de passe expiré, qu’ils ont été lockés :

select username, account_status, expiry_date, lock_date from dba_users;

expired01-usersexpiredlocked

Ici on peut voir par exemple que l’utilisateur « scott » a un mot de passe expiré, et qu’en plus il est locké.
Tout d’abord nous allons réinitialisé son mot de passe :

alter user scott identified by welcome1;

expired02-userslocked

On voit que si l’on raffaichit la liste des utilisateurs, « scott » n’a plus son mot de passe expiré.
Cependant, il reste locké, et donc toujours inutilisable pour se connecter.
A présent nous allons unlock son compte :

alter user scott account unlock;

expired03-usersopen

Et voilà à présent « scott » est bel et bien « open » !

Clore le problème définitivement

Les explications précédentes vous permettront de résoudre votre problème de manière ponctuelle. Cependant, le problème reviendra avec le temps.
Si vous souhaitez le faire disparaitre de manière définitive, voici comment procéder.
Chaque utilisateur est associé à un profil. Si ce profil n’a pas été définit explicitement, l’utilisateur est associé au profil par défaut. Celui-ci aura une durée de validité de mot de passe de 180 jours notamment.
Pour voir les paramètres d’un profil, vous pouvez utiliser cette requête :

select * from dba_profiles where PROFILE = 'DEFAULT';

expired04-originalvalues

Maintenant, on peut par exemple définir que le mot de passe n’expirera jamais pour les utilisateurs de ce profil :

ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

expired05-modiedvalues

A présent si l’on rafraîchit notre liste d’utilisateurs, on peut observer que « scott » n’a plus de date d’expiration d’inscrite ! Vous ne rencontrerez plus le problème !

expired06-usernoexpiracydate

Conclusion

Ceci reste une opération intéressante pour les environnements ne nécessitant pas de sécurité : environnements de tests, développement.
Si comme moi vous n’êtes pas DBA, et devez à chaque fois rechercher comment gérer les utilisateurs pour résoudre ce problème, vous ne le rencontrerez plus.

Sources

1 réflexion sur “Gérer les utilisateurs expirés et/ou lockés (expired and locked users)”

Les commentaires sont fermés.