Comme l'état des autres réponses, changer le profil de l'utilisateur (par exemple le profil «DEFAULT») de manière appropriée conduira à des mots de passe qui, une fois définis, n'expireront jamais.
Cependant, comme le souligne un commentateur, les mots de passe définis sous les anciennes valeurs du profil peuvent déjà être expirés et (si après la période de grâce spécifiée par le profil) le compte est verrouillé.
La solution pour les mots de passe expirés avec des comptes verrouillés (comme indiqué dans un commentaire de réponse) consiste à utiliser une version de la commande ALTER USER:
ALTER USER xyz_user ACCOUNT UNLOCK;
Cependant, la commande de déverrouillage ne fonctionne que pour les comptes où le compte est réellement verrouillé, mais pas pour les comptes qui sont dans la période de grâce, c'est-à-dire où le mot de passe a expiré mais le compte n'est pas encore verrouillé. Pour ces comptes, le mot de passe doit être réinitialisé avec une autre version de la commande ALTER USER:
ALTER USER xyz_user IDENTIFIED BY new_password;
Vous trouverez ci-dessous un petit script SQL * Plus qu'un utilisateur privilégié (par exemple, l'utilisateur «SYS») peut utiliser pour réinitialiser le mot de passe d'un utilisateur à la valeur hachée actuelle stockée dans la base de données.
EDIT: les anciennes versions d'Oracle stockent le mot de passe ou le mot de passe-hachage dans la colonne pword, les versions plus récentes d'Oracle stockent le mot de passe-hachage dans la colonne spare4. Le script ci-dessous a changé pour collecter les colonnes pword et spare4, mais pour utiliser la colonne spare4 pour réinitialiser le compte de l'utilisateur; modifier au besoin.
REM Tell SQL*Plus to show before and after versions of variable substitutions.
SET VERIFY ON
SHOW VERIFY
REM Tell SQL*Plus to use the ampersand '&' to indicate variables in substitution/expansion.
SET DEFINE '&'
SHOW DEFINE
REM Specify in a SQL*Plus variable the account to 'reset'.
REM Note that user names are case sensitive in recent versions of Oracle.
REM DEFINE USER_NAME = 'xyz_user'
REM Show the status of the account before reset.
SELECT
ACCOUNT_STATUS,
TO_CHAR(LOCK_DATE, 'YYYY-MM-DD HH24:MI:SS') AS LOCK_DATE,
TO_CHAR(EXPIRY_DATE, 'YYYY-MM-DD HH24:MI:SS') AS EXPIRY_DATE
FROM
DBA_USERS
WHERE
USERNAME = '&USER_NAME';
REM Create SQL*Plus variable to hold the existing values of the password and spare4 columns.
DEFINE OLD_SPARE4 = ""
DEFINE OLD_PASSWORD = ""
REM Tell SQL*Plus where to store the values to be selected with SQL.
REM Note that the password hash value is stored in spare4 column in recent versions of Oracle,
REM and in the password column in older versions of Oracle.
COLUMN SPARE4HASH NEW_VALUE OLD_SPARE4
COLUMN PWORDHASH NEW_VALUE OLD_PASSWORD
REM Select the old spare4 and password columns as delimited strings
SELECT
'''' || SPARE4 || '''' AS SPARE4HASH,
'''' || PASSWORD || '''' AS PWORDHASH
FROM
SYS.USER$
WHERE
NAME = '&USER_NAME';
REM Show the contents of the SQL*Plus variables
DEFINE OLD_SPARE4
DEFINE OLD_PASSWORD
REM Reset the password - Older versions of Oracle (e.g. Oracle 10g and older)
REM ALTER USER &USER_NAME IDENTIFIED BY VALUES &OLD_PASSWORD;
REM Reset the password - Newer versions of Oracle (e.g. Oracle 11g and newer)
ALTER USER &USER_NAME IDENTIFIED BY VALUES &OLD_SPARE4;
REM Show the status of the account after reset
SELECT
ACCOUNT_STATUS,
TO_CHAR(LOCK_DATE, 'YYYY-MM-DD HH24:MI:SS') AS LOCK_DATE,
TO_CHAR(EXPIRY_DATE, 'YYYY-MM-DD HH24:MI:SS') AS EXPIRY_DATE
FROM
DBA_USERS
WHERE
USERNAME = '&USER_NAME';