2009-07-08 4 views
145

Utilizzo Oracle per lo sviluppo. La password per un account bootstrap che utilizzo sempre per ricostruire il mio database è scaduta.Come si disattiva la scadenza della password Oracle?

Come si disattiva la scadenza della password per questo utente (e tutti gli altri utenti) in modo permanente?

Utilizzo Oracle 11g, che ha una password scaduta per impostazione predefinita.

+0

Penso che potrebbe essere meglio chiedere questo su serverfault.com. Non ho intenzione di forzarlo perché hai detto che lo stai usando per lo sviluppo, e penso che ci sia ancora una possibilità che qualcuno qui lo saprà e/o altri qui potrebbero beneficiare di queste informazioni. –

+0

Penso che farò proprio questo. Stavo discutendo su quale sito fosse più appropriato, dal momento che si tratta di una domanda di base del database e non di una cosa da DBA. –

+0

Non so quale sia il criterio dupe per le domande cross-site, ma ecco il link: http://serverfault.com/questions/37622/how-do-i-turn-off-oracle-password-expiration –

risposta

253

di modificare la politica di scadenza della password per un determinato profilo utente in Oracle per prima cosa controllare Quale profilo l'utente nell'utilizzo:

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

Quindi è possibile modificare il limite di non scadere mai utilizzando:

alter profile <profile_name> limit password_life_time UNLIMITED; 

Se si desidera controllare in precedenza il limite si può usare:

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

Questo ha modificato il profilo. Tuttavia, ho utenti le cui password sono impostate per scadere perché il profilo predefinito lo aveva in quanto tale quando sono state create. Come modifico questi account utente in modo che la password non scada? –

+9

'seleziona nome utente, scadenza_data, account_status da dba_users;' per visualizzare lo stato account_status. per l'account in scadenza, potrebbe essere necessario reimpostare la password una volta per l'ultima volta. –

+4

alter user aaa account unlock; –

16

Credo che il comportamento di scadenza della password, per impostazione predefinita, non scada mai. Tuttavia, è possibile impostare un profilo per il proprio set utente e impostare PASSWORD_LIFE_TIME. Vedere lo orafaq per ulteriori dettagli. È possibile vedere here per un esempio della prospettiva e dell'utilizzo di una persona.

+7

Penso in una nuova installazione di 11 g (anziché un aggiornamento) con la sicurezza migliorata consigliata, la password scadrà di default dopo 30 giorni. –

+1

In 11g sono 180 giorni: http://docs.oracle.com/cd/E38689_01/pt853pbr0/eng/pt/tadm/task_WorkingWithOracle11gSecurityFeatures-3e78fd.html –

77

Fo r sviluppo è possibile disabilitare il criterio password se nessun altro profilo è stato impostato (ad es. disattivare la scadenza della password in uno predefinito):

ALTER PROFILE "DEFAULT" LIMIT PASSWORD_VERIFY_FUNCTION NULL; 

Quindi, reimpostare la password e sbloccare l'account utente. Non dovrebbe mai scadere ancora:

alter user user_name identified by new_password account unlock; 
+0

Grazie, funziona benissimo! – grep

32

Come lo stato altre risposte, cambiando il profilo dell'utente (ad esempio il 'default' profilo) opportunamente porterà alle password, che, una volta impostato, non scadrà mai.

Tuttavia, come indicato da un commentatore, le password impostate sotto i vecchi valori del profilo potrebbero essere già scadute e (se dopo il periodo di tolleranza specificato del profilo) l'account bloccato.

La soluzione per le password scadute con i conti bloccati (come previsto in un commento di risposta) è quello di utilizzare una versione del comando ALTER USER:

ALTER USER xyz_user ACCOUNT UNLOCK; 

Tuttavia, il comando di sblocco funziona solo per gli account in cui l'account è effettivamente bloccato, ma non per quegli account che si trovano nel periodo di prova, in cui la password è scaduta ma l'account non è ancora bloccato. Per questi conti la password deve essere reimpostata con un'altra versione del comando ALTER USER:

ALTER USER xyz_user IDENTIFIED BY new_password; 

Qui di seguito è un po 'SQL * Plus script che un utente privilegiato (ad esempio, l'utente 'SYS') può utilizzare per reimpostare la password di un utente al valore corrente dell'hash esistente memorizzato nel database.

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

Molto bello, grazie – dreyln

+1

Grazie per l'aiuto. È così difficile trovare una risposta pertinente. Ogni altra risposta si riferisce solo a PASSWORD_LIFE_TIME. – sabertiger

+0

La colonna SYS.USER $ .PASSWORD conterrà solo l'hash della versione della password senza maiuscole/minuscole (maiuscole?). In Oracle 11, a meno che non si imposti il ​​parametro di sistema SEC_CASE_SENSITIVE_LOGON = FALSE, nella colonna SYS.USER $ .SPARE4 sarà presente un hash molto più lungo della password sensibile al maiuscolo/minuscolo. – Morbo

1

suggerirò la sua non è una buona idea per disattivare la scadenza della password in quanto può portare a possibili minacce alla riservatezza, integrità e disponibilità dei dati.

Tuttavia se lo si desidera.

Se si dispone di accesso appropriato uso seguente SQL

SELEZIONA nome utente, account_status DA dba_users;

Questo dovrebbe dare risultati come questo.

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 

Ora è possibile utilizzare Pedro Carriço rispondere https://stackoverflow.com/a/6777079/2432468