Come disattivare la scadenza della password Oracle?


177

Sto usando Oracle per lo sviluppo. La password per un account bootstrap che utilizzo sempre per ricostruire il mio database è scaduta.

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

Sto usando Oracle 11g, che ha le password scadono per impostazione predefinita.


Penso che potresti fare meglio a chiedere questo su serverfault.com. Non lo forzerò perché hai detto che lo stai usando per lo sviluppo, e penso che ci sia ancora una possibilità che qualcuno qui lo sappia e / o che altri qui possano beneficiare di queste informazioni.
Bill the Lizard,

Penso che farò proprio questo. Stavo discutendo su quale sito fosse più appropriato, dato che si tratta di una domanda di database di base e non tanto di un DBA.
Josh Kodroff, l'

Non sono sicuro di quale sia la politica dupe per le domande cross-site, ma ecco il link: serverfault.com/questions/37622/…
Josh Kodroff

Risposte:


313

Per modificare la politica di scadenza della password per un determinato profilo utente in Oracle, controlla innanzitutto quale profilo sta utilizzando l'utente:

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

Quindi puoi modificare il limite per non scadere mai usando:

alter profile <profile_name> limit password_life_time UNLIMITED;

Se si desidera verificare in precedenza il limite, è possibile utilizzare:

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

5
Questo ha modificato il profilo. Tuttavia, ho utenti le cui password sono impostate in scadenza perché il profilo predefinito lo aveva come tale al momento della creazione. Come posso modificare questi account utente in modo che la password non scada?
Jay Imerman,

14
select username,expiry_date,account_status from dba_users; per visualizzare account_status. per gli account in scadenza, potrebbe essere necessario reimpostare la password una volta per l'ultima volta.
Will Wu

6
modifica utente sblocco account aaa;
Kalpesh Soni,

1
Per completezza, se avete bisogno di cambiare un utente a un altro profilo: ALTER USER Bob PROFILE MyNonExpiringProfile;.

nessuna riga selezionata nella query "seleziona profilo da DBA_USERS dove username = '<username>';"
gaurav,

90

Per lo sviluppo è possibile disabilitare la politica password se non è stato impostato nessun altro profilo (ovvero disabilitare la scadenza password in quella predefinita):

ALTER PROFILE "DEFAULT" LIMIT PASSWORD_VERIFY_FUNCTION NULL;

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

alter user user_name identified by new_password account unlock;

40

Come affermano le altre risposte, la modifica del profilo dell'utente (ad es. Il profilo "DEFAULT") porterà a password che, una volta impostate, non scadranno mai.

Tuttavia, come sottolinea un commentatore, le password impostate con 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 account bloccati (come indicato in un commento di risposta) è 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 tolleranza, ovvero dove la password è scaduta ma l'account non è ancora bloccato. Per questi account è necessario reimpostare la password con un'altra versione del comando ALTER USER:

ALTER USER xyz_user IDENTIFIED BY new_password;

Di seguito è riportato un piccolo script SQL * Plus che un utente privilegiato (ad esempio, l'utente "SYS") può utilizzare per reimpostare la password di un utente al valore hash corrente esistente archiviato nel database.

EDIT: le versioni precedenti di Oracle memorizzano la password o l'hash della password nella colonna pword, le versioni più recenti di Oracle memorizzano l'hash della password nella colonna spare4. Lo script seguente è stato modificato per raccogliere le colonne pword e spare4, ma per utilizzare la colonna spare4 per ripristinare l'account dell'utente; modificare secondo necessità.

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';

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

La colonna SYS.USER $ .PASSWORD conterrà solo l'hash della versione NON sensibile al maiuscolo / minuscolo della password. 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 con distinzione tra maiuscole e minuscole.
Morbo,

16

Ritengo che il comportamento alla scadenza della password, per impostazione predefinita, non scada mai. Tuttavia, è possibile impostare un profilo per il proprio set di utenti dev e impostare il PASSWORD_LIFE_TIME. Vedi orafaq per maggiori dettagli. Puoi vedere qui per un esempio della prospettiva e dell'utilizzo di una persona.


7
Penso che in una nuova installazione di 11g (al contrario di un aggiornamento) con la sicurezza migliorata consigliata, le password scadranno automaticamente dopo 30 giorni.
Gary Myers,


0

Suggerirò che non è una buona idea disattivare la scadenza della password poiché può portare a possibili minacce alla riservatezza, integrità e disponibilità dei dati.

Tuttavia, se lo desideri.

Se si dispone dell'accesso corretto, utilizzare SQL seguente

SELEZIONA username, account_status FROM dba_users;

Questo dovrebbe darti un risultato 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 puoi usare la risposta di Pedro Carriço https://stackoverflow.com/a/6777079/2432468


Anche se concordo sul fatto che disabilitare la scadenza della password negli ambienti di produzione è avventato, potremmo volerlo disattivare in Sviluppo o Test.
APC
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.