2009-07-08 9 views
145

Ich verwende Oracle für die Entwicklung. Das Kennwort für ein Bootstrap-Konto, das ich immer zum Neuaufbau meiner Datenbank verwende, ist abgelaufen.Wie deaktiviere ich den Oracle-Passwortablauf?

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

Ich benutze Oracle 11g, die Passwörter standardmäßig ablaufen.

+0

Ich denke, man könnte besser sein zu fragen diese auf serverfault.com. Ich werde es nicht erzwingen, weil du sagst, dass du es für die Entwicklung benutzt, und ich denke, es gibt immer noch eine Chance, dass jemand hier davon erfährt und/oder andere hier von dieser Information profitieren könnten. –

+0

Ich denke, ich werde genau das tun. Ich diskutierte, für welche Seite es besser geeignet war, da es sich um eine grundlegende Datenbankfrage und nicht um eine DBA-Sache handelt. –

+0

Nicht sicher, was die Dupe-Richtlinie für Cross-Site-Fragen ist, aber hier ist der Link: http://serverfault.com/questions/37622/how-do-i-turn-off-oracle-password-expiration –

Antwort

253

Um das Passwort Ablauf Politik für ein bestimmtes Benutzerprofil in Oracle zu verändern erstes ist, den Benutzer Weicht Profil Check-in mit:

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

Dann können Sie den Grenzwert nie ablaufen mit:

alter profile <profile_name> limit password_life_time UNLIMITED; 

Wenn Sie zuvor wollen die Grenze überprüfen, können Sie verwenden:

select resource_name,limit from dba_profiles where profile='<profile_name>'; 
+4

Dies änderte das Profil. Ich habe jedoch Benutzer, deren Kennwörter abgelaufen sind, da das Standardprofil es als solche hatte, als sie erstellt wurden. Wie ändere ich diese Benutzerkonten, damit das Kennwort nicht abläuft? –

+9

'Wählen Sie Benutzername, Ablaufdatum, Account_Status von dba_users;' , um den Account_Status anzuzeigen. für diejenigen, die Konto ablaufen, müssen Sie möglicherweise das Passwort einmal zum letzten Mal zurücksetzen. –

+4

alter Benutzer aaa Konto entsperren; –

16

Ich glaube, dass das Ablaufverhalten des Passworts standardmäßig nie abläuft. Sie können jedoch ein Profil für Ihren Entwicklerbenutzer festlegen und PASSWORD_LIFE_TIME festlegen. Weitere Informationen finden Sie unter orafaq. Sie können here für ein Beispiel der Perspektive und Verwendung einer Person sehen.

+7

Ich denke, in eine frische 11g Installation (im Gegensatz zu einem Upgrade) mit der empfohlenen verbesserten Sicherheit, die Passwörter werden standardmäßig nach 30 Tagen ablaufen. –

+1

Auf 11g sind es 180 Tage: http://docs.oracle.com/cd/E38689_01/pt853pbr0/eng/pt/tadm/task_WorkingWithOracle11gSecurityFeatures-3e78fd.html –

77

Fo Entwicklung Sie können die Kennwortrichtlinie deaktivieren, wenn kein anderes Profil festgelegt wurde (z. Deaktivieren Sie den Ablauf des Kennworts standardmäßig 1):

ALTER PROFILE "DEFAULT" LIMIT PASSWORD_VERIFY_FUNCTION NULL; 

Dann Passwort zurücksetzen und Benutzerkonto entsperren. Es sollte nie wieder verfallen:

alter user user_name identified by new_password account unlock; 
+0

Danke, das funktioniert einfach nur gut! – grep

32

Wie die anderen Antworten Zustand, das Profil des Benutzers zu ändern (zum Beispiel der ‚Standard‘ Profil) in geeigneter Weise zu Passwörter führen wird, dass einmal gesetzt ist, wird nie ablaufen.

Wie jedoch ein Kommentator hervorhebt, sind Kennwörter, die unter den alten Werten des Profils festgelegt wurden, möglicherweise bereits abgelaufen und (falls nach der angegebenen Kulanzfrist des Profils) das Konto gesperrt.

Die Lösung für abgelaufene Kennwörter mit gesperrten Konten (wie in einem Antwort Kommentar versehen) ist eine Version des Befehls ALTER USER zu verwenden:

ALTER USER xyz_user ACCOUNT UNLOCK; 

jedoch der Freigabebefehl für Konten funktioniert nur, wenn das Konto tatsächlich gesperrt, aber nicht für die Konten, die in der Schonfrist sind, in denen das Passwort abgelaufen ist, aber das Konto noch nicht gesperrt ist. Für diese Konten muss das Passwort mit einer anderen Version des ALTEN USER-Befehls zurückgesetzt werden:

ALTER USER xyz_user IDENTIFIED BY new_password; 

Unten ist ein wenig SQL * Plus-Skript, das ein privilegierter Benutzer (zB Benutzer SYS ') verwenden kann, das Kennwort einen Benutzers zurücksetzen zu dem aktuellen Hash-Wert, der in der Datenbank gespeichert ist.

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 variable substitution expansion 
SET DEFINE '&' 
SHOW DEFINE 

REM Specify in a SQL*Plus variable the account to 'reset' 
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 
FROM 
    DBA_USERS 
WHERE 
    USERNAME = '&USER_NAME'; 

REM Create a SQL*Plus variable to hold the hash of existing password 
DEFINE OLD_PASSWORD = "" 

REM Tell SQL*Plus where to store the value to be selected with SQL 
COLUMN PWORDHASH NEW_VALUE OLD_PASSWORD 

REM Select the old hash password as a delimited string 
SELECT 
    '''' || PASSWORD || '''' AS PWORDHASH 
FROM 
    SYS.USER$ 
WHERE 
    NAME = '&USER_NAME'; 

REM Show the contents of the SQL*Plus variable 
DEFINE OLD_PASSWORD 

REM Reset the password 
ALTER USER &USER_NAME IDENTIFIED BY VALUES &OLD_PASSWORD; 

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 
FROM 
    DBA_USERS 
WHERE 
    USERNAME = '&USER_NAME'; 
+0

Sehr schön, danke – dreyln

+1

Danke für die Hilfe. Es ist so schwierig, eine relevante Antwort zu finden. Jede andere Antwort bezieht sich nur auf PASSWORD_LIFE_TIME. – sabertiger

+0

Die Spalte SYS.USER $ .PASSWORD enthält nur den Hash der nicht passwortgeschützten (Groß-?) Version des Kennworts. Wenn Sie in Oracle 11 den Systemparameter SEC_CASE_SENSITIVE_LOGON = FALSE nicht setzen, wird in der Spalte SYS.USER $ .SPARE4 ein wesentlich längerer Hashwert für das Kennwort mit Groß- und Kleinschreibung angezeigt. – Morbo

1

Ich werde es nicht eine gute Idee vorschlagen, das Passwort Ablauf zu deaktivieren, da es auf mögliche Bedrohungen der Vertraulichkeit, Integrität und Verfügbarkeit von Daten führen kann.

Allerdings, wenn Sie so wollen.

Wenn Sie SQL nach einer ordnungsgemäßen Zugriff Verwendung haben

SELECT Benutzername, account_status FROM dba_users;

Dies sollte Ihnen Ergebnis wie folgt erhalten.

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ço beantworten verwenden https://stackoverflow.com/a/6777079/2432468

Verwandte Themen