Wie in den anderen Antworten angegeben, führt das entsprechende Ändern des Benutzerprofils (z. B. des 'DEFAULT'-Profils) dazu, dass Kennwörter, die einmal festgelegt wurden, niemals ablaufen.
Ein Kommentator weist jedoch darauf hin, dass Kennwörter, die unter den alten Werten des Profils festgelegt wurden, möglicherweise bereits abgelaufen sind und das Konto (wenn nach der angegebenen Nachfrist des Profils) gesperrt wurde.
Die Lösung für abgelaufene Kennwörter mit gesperrten Konten (wie in einem Antwortkommentar angegeben) besteht darin, eine Version des Befehls ALTER USER zu verwenden:
ALTER USER xyz_user ACCOUNT UNLOCK;
Der Befehl zum Entsperren funktioniert jedoch nur für Konten, bei denen das Konto tatsächlich gesperrt ist, nicht jedoch für Konten, die sich in der Nachfrist befinden, dh bei denen das Kennwort abgelaufen ist, das Konto jedoch noch nicht gesperrt ist. Für diese Konten muss das Kennwort mit einer anderen Version des Befehls ALTER USER zurückgesetzt werden:
ALTER USER xyz_user IDENTIFIED BY new_password;
Im Folgenden finden Sie ein kleines SQL * Plus-Skript, mit dem ein privilegierter Benutzer (z. B. Benutzer 'SYS') das Kennwort eines Benutzers auf den aktuell in der Datenbank gespeicherten Hashwert zurücksetzen kann.
BEARBEITEN: Ältere Versionen von Oracle speichern das Kennwort oder den Kennwort-Hash in der pword-Spalte, neuere Versionen von Oracle speichern den Kennwort-Hash in der Spare4-Spalte. Das folgende Skript wurde geändert, um die Spalten "pword" und "spare4" zu sammeln, aber um die Spalte "spare4" zum Zurücksetzen des Benutzerkontos zu verwenden. nach Bedarf ändern.
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';