Wie deaktiviere ich den Ablauf des Oracle-Passworts?

176

Ich verwende Oracle für die Entwicklung. Das Kennwort für ein Bootstrap-Konto, das ich immer zum Neuerstellen meiner Datenbank verwende, ist abgelaufen.

Wie deaktiviere ich den Kennwortablauf für diesen Benutzer (und alle anderen Benutzer) dauerhaft?

Ich verwende Oracle 11g, dessen Kennwörter standardmäßig ablaufen.

Josh Kodroff
quelle
Ich denke, Sie sollten dies besser auf serverfault.com erfragen. Ich werde es nicht erzwingen, weil Sie gesagt haben, dass Sie es für die Entwicklung verwenden, und ich denke, es besteht immer noch die Möglichkeit, dass jemand hier es weiß und / oder andere hier von diesen Informationen profitieren.
Bill the Lizard
Ich denke, ich werde genau das tun. Ich habe darüber diskutiert, für welche Site es besser geeignet ist, da es sich um eine grundlegende Datenbankfrage handelt und nicht so sehr um eine DBA-Sache.
Josh Kodroff
Ich bin mir nicht sicher, wie die Dupe-Richtlinie für standortübergreifende Fragen lautet, aber hier ist der Link: serverfault.com/questions/37622/…
Josh Kodroff

Antworten:

312

Um die Kennwortablaufrichtlinie für ein bestimmtes Benutzerprofil in Oracle zu ändern, überprüfen Sie zunächst, welches Profil der Benutzer verwendet:

select profile from DBA_USERS where username = '<username>';

Dann können Sie das Limit so ändern, dass es niemals abläuft, indem Sie:

alter profile <profile_name> limit password_life_time UNLIMITED;

Wenn Sie zuvor das Limit überprüfen möchten, können Sie Folgendes verwenden:

select resource_name,limit from dba_profiles where profile='<profile_name>';
Pedro Carriço
quelle
5
Dies veränderte das Profil. Ich habe jedoch Benutzer, deren Kennwörter so eingestellt sind, dass sie ablaufen, da das Standardprofil sie als solche hatte, als sie erstellt wurden. Wie ändere ich diese Benutzerkonten, damit das Passwort nicht abläuft?
Jay Imerman
14
select username,expiry_date,account_status from dba_users; um den account_status anzuzeigen. Für diejenigen, deren Konto abläuft, müssen Sie das Kennwort möglicherweise zum letzten Mal einmal zurücksetzen.
Will Wu
6
Benutzer aaa Konto entsperren ändern;
Kalpesh Soni
1
Der Vollständigkeit halber, wenn Sie einen Benutzer in ein anderes Profil ändern müssen : ALTER USER Bob PROFILE MyNonExpiringProfile;.
In der Abfrage "Profil aus DBA_USERS auswählen, wobei Benutzername = '<Benutzername>';
Gaurav
90

Für die Entwicklung können Sie die Kennwortrichtlinie deaktivieren, wenn kein anderes Profil festgelegt wurde (dh den Kennwortablauf in der Standardeinstellung deaktivieren):

ALTER PROFILE "DEFAULT" LIMIT PASSWORD_VERIFY_FUNCTION NULL;

Setzen Sie dann das Passwort zurück und entsperren Sie das Benutzerkonto. Es sollte nie wieder ablaufen:

alter user user_name identified by new_password account unlock;
Shimon
quelle
40

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';
Kieron Hardy
quelle
2
Danke für die Hilfe. Es ist so schwer, eine relevante Antwort zu finden. Jede andere Antwort bezieht sich nur auf PASSWORD_LIFE_TIME.
Sabertiger
Die Spalte SYS.USER $ .PASSWORD enthält nur den Hash der Version des Kennworts, bei der die Groß- und Kleinschreibung nicht berücksichtigt wird (Großbuchstaben?). Wenn Sie in Oracle 11 nicht den Systemparameter SEC_CASE_SENSITIVE_LOGON = FALSE festlegen, wird in der Spalte SYS.USER $ .SPARE4 ein viel längerer Hash des Kennworts mit Groß- und Kleinschreibung angezeigt.
Morbo
16

Ich glaube, dass das Kennwortablaufverhalten standardmäßig niemals abläuft. Sie können jedoch ein Profil für Ihren Entwicklerbenutzer einrichten und das festlegen PASSWORD_LIFE_TIME. Weitere Informationen finden Sie im orafaq . Sie können sehen , hier ein Beispiel für eine Person Perspektive und Nutzung.

akf
quelle
7
Ich denke, bei einer Neuinstallation von 11g (im Gegensatz zu einem Upgrade) mit der empfohlenen verbesserten Sicherheit laufen die Kennwörter standardmäßig nach 30 Tagen ab.
Gary Myers
1
Auf 11g ist es 180 Tage: docs.oracle.com/cd/E38689_01/pt853pbr0/eng/pt/tadm/…
Nicolas Mommaerts
0

Ich werde vorschlagen, dass es keine gute Idee ist, den Ablauf des Passworts zu deaktivieren, da dies zu möglichen Bedrohungen für die Vertraulichkeit, Integrität und Verfügbarkeit von Daten führen kann.

Wenn Sie möchten.

Wenn Sie über einen ordnungsgemäßen Zugriff verfügen, verwenden Sie folgendes SQL

SELECT Benutzername, account_status FROM dba_users;

Dies sollte Ihnen ein solches Ergebnis liefern.

   USERNAME                       ACCOUNT_STATUS
------------------------------ -----------------

SYSTEM                         OPEN
SYS                            OPEN
SDMADM                         OPEN
MARKETPLACE                    OPEN
SCHEMAOWNER                    OPEN
ANONYMOUS                      OPEN
SCHEMAOWNER2                   OPEN
SDMADM2                        OPEN
SCHEMAOWNER1                   OPEN
SDMADM1                        OPEN
HR                             EXPIRED(GRACE)

USERNAME                       ACCOUNT_STATUS
------------------------------ -----------------

APEX_PUBLIC_USER               LOCKED
APEX_040000                    LOCKED
FLOWS_FILES                    LOCKED
XS$NULL                        EXPIRED & LOCKED
OUTLN                          EXPIRED & LOCKED
XDB                            EXPIRED & LOCKED
CTXSYS                         EXPIRED & LOCKED
MDSYS                          EXPIRED & LOCKED

Jetzt können Sie Pedro Carriços Antwort https://stackoverflow.com/a/6777079/2432468 verwenden

Pawan Kumar
quelle
Obwohl ich damit einverstanden bin, dass es vorschnell ist, das Ablaufen von Kennwörtern in Produktionsumgebungen zu deaktivieren, möchten wir es möglicherweise in Entwicklung oder Test deaktivieren.
APC