Jak wyłączyć wygaśnięcie hasła Oracle?

177

Używam Oracle do programowania. Hasło do konta bootstrap, którego zawsze używam do odbudowy bazy danych, wygasło.

Jak trwale wyłączyć wygaśnięcie hasła dla tego użytkownika (i wszystkich innych użytkowników)?

Używam Oracle 11g, który ma hasła wygasające domyślnie.

Josh Kodroff
źródło
Myślę, że lepiej zapytać o to na serverfault.com. Nie zamierzam tego forsować, ponieważ powiedziałeś, że używasz go do rozwoju, i myślę, że nadal jest szansa, że ​​ktoś tutaj się dowie i / lub inni tutaj mogą skorzystać z tych informacji.
Bill the Lizard
Myślę, że właśnie to zrobię. Zastanawiałem się, dla której witryny będzie to bardziej odpowiednie, ponieważ jest to podstawowe pytanie dotyczące bazy danych, a nie kwestia DBA.
Josh Kodroff,
Nie jestem pewien, jakie są zasady dotyczące
kopiowania w przypadku

Odpowiedzi:

313

Aby zmienić politykę wygasania hasła dla określonego profilu użytkownika w Oracle, najpierw sprawdź, którego profilu używa ten użytkownik:

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

Następnie możesz zmienić limit, aby nigdy nie wygasał, używając:

alter profile <profile_name> limit password_life_time UNLIMITED;

Jeśli chcesz wcześniej sprawdzić limit możesz skorzystać z:

select resource_name,limit from dba_profiles where profile='<profile_name>';
Pedro Carriço
źródło
5
To zmieniło profil. Jednak mam użytkowników, których hasła wygasają, ponieważ domyślny profil miał je jako takie, gdy zostały utworzone. Jak zmienić te konta użytkowników, aby hasło nie wygasło?
Jay Imerman
14
select username,expiry_date,account_status from dba_users; aby wyświetlić stan_konta. w przypadku wygasających kont może być konieczne zresetowanie hasła po raz ostatni.
Will Wu
6
zmienić odblokowanie konta użytkownika aaa;
Kalpesh Soni
1
Dla kompletności, jeśli trzeba zmienić na inny profil użytkownika: ALTER USER Bob PROFILE MyNonExpiringProfile;.
brak wybranych wierszy w zapytaniu "wybierz profil od DBA_USERS, gdzie nazwa użytkownika = '<nazwa_użytkownika>';"
gaurav
90

Na potrzeby programowania możesz wyłączyć politykę haseł, jeśli żaden inny profil nie został ustawiony (tj. Domyślnie wyłącz wygaśnięcie hasła):

ALTER PROFILE "DEFAULT" LIMIT PASSWORD_VERIFY_FUNCTION NULL;

Następnie zresetuj hasło i odblokuj konto użytkownika. Nie powinno już nigdy wygasać:

alter user user_name identified by new_password account unlock;
Szymon
źródło
40

Jak podają inne odpowiedzi, odpowiednia zmiana profilu użytkownika (np. Profilu „DOMYŚLNY”) spowoduje, że hasła, które raz ustawione, nigdy nie wygasną.

Jednak, jak zauważył jeden z komentatorów, hasła ustawione w starych wartościach profilu mogą już wygasnąć, a konto (jeśli po upływie określonego okresu karencji profilu) zostało zablokowane.

Rozwiązaniem dla wygasłych haseł do zablokowanych kont (jak podano w komentarzu) jest użycie jednej wersji polecenia ALTER USER:

ALTER USER xyz_user ACCOUNT UNLOCK;

Jednak polecenie odblokowania działa tylko dla kont, na których konto jest faktycznie zablokowane, ale nie dla tych kont, które są w okresie karencji, tj. Dla których hasło wygasło, ale konto nie jest jeszcze zablokowane. W przypadku tych kont hasło należy zresetować za pomocą innej wersji polecenia ALTER USER:

ALTER USER xyz_user IDENTIFIED BY new_password;

Poniżej znajduje się mały skrypt SQL * Plus, którego uprzywilejowany użytkownik (np. Użytkownik „SYS”) może użyć do zresetowania hasła użytkownika do bieżącej wartości zaszyfrowanej przechowywanej w bazie danych.

EDYCJA: Starsze wersje Oracle przechowują hasło lub skrót hasła w kolumnie haseł, nowsze wersje Oracle przechowują skrót hasła w kolumnie Spare4. Poniższy skrypt został zmieniony, aby zebrać kolumny pword i spare4, ale aby użyć kolumny Spare4 do zresetowania konta użytkownika; zmodyfikuj w razie potrzeby.

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
źródło
2
Dzięki za pomoc. Tak trudno jest znaleźć odpowiednią odpowiedź. Każda inna odpowiedź odnosi się tylko do PASSWORD_LIFE_TIME.
sabertiger
Kolumna SYS.USER $ .PASSWORD będzie zawierać tylko skrót wersji hasła, która nie uwzględnia wielkości liter (wielkie litery?). W Oracle 11, o ile nie ustawisz parametru systemowego SEC_CASE_SENSITIVE_LOGON = FALSE, w kolumnie SYS.USER $ .SPARE4 będzie znacznie dłuższy skrót hasła uwzględniającego wielkość liter.
Morbo,
16

Uważam, że domyślnie zachowanie związane z wygaśnięciem hasła nigdy nie wygasa. Możesz jednak skonfigurować profil dla swojego dewelopera, ustawić i ustawić PASSWORD_LIFE_TIME. Więcej informacji znajdziesz w orafaq . Możesz zobaczyć tutaj przykład perspektywy i użycia jednej osoby.

akf
źródło
7
Myślę, że w nowej instalacji 11g (w przeciwieństwie do aktualizacji) z zalecanym ulepszonym zabezpieczeniem, hasła domyślnie wygasają po 30 dniach.
Gary Myers
1
W 11g to 180 dni: docs.oracle.com/cd/E38689_01/pt853pbr0/eng/pt/tadm/ ...
Nicolas Mommaerts
0

Zasugeruję, że nie jest dobrym pomysłem wyłączenie wygaśnięcia hasła, ponieważ może to prowadzić do możliwych zagrożeń dla poufności, integralności i dostępności danych.

Jednak jeśli chcesz.

Jeśli masz odpowiedni dostęp, użyj następującego SQL

WYBIERZ nazwę użytkownika, account_status FROM dba_users;

To powinno dać taki wynik.

   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

Teraz możesz użyć odpowiedzi Pedro Carriço https://stackoverflow.com/a/6777079/2432468

Pawan Kumar
źródło
Chociaż zgadzam się, że wyłączanie wygaśnięcia hasła w środowiskach produkcyjnych jest pochopne, możemy chcieć to wyłączyć w fazie programowania lub testowania.
APC