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

Używam Oracle do rozwoju. Wygasło hasło do konta bootstrap, którego zawsze używam do odbudowy bazy danych.

Jak wyłączyć wygasanie hasła dla tego użytkownika (i wszystkich innych użytkowników) na stałe?

Używam Oracle 11g, który domyślnie wygasa.

Author: Josh Kodroff, 2009-07-08

6 answers

Aby zmienić zasady ważności hasła dla określonego profilu użytkownika w Oracle, najpierw sprawdź, z którego profilu użytkownik korzysta:

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

Wtedy możesz zmienić limit, aby nigdy nie wygasł, używając:

alter profile <profile_name> limit password_life_time UNLIMITED;

Jeśli chcesz wcześniej sprawdzić limit możesz użyć:

select resource_name,limit from dba_profiles where profile='<profile_name>';
 324
Author: Pedro Carriço,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-04 05:46:29

Dla rozwoju możesz wyłączyć politykę haseł, jeśli nie ustawiono żadnego innego profilu (tzn. wyłączyć wygaśnięcie hasła w domyślnym):

ALTER PROFILE "DEFAULT" LIMIT PASSWORD_VERIFY_FUNCTION NULL;

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

alter user user_name identified by new_password account unlock;
 94
Author: Shimon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-11 19:31:17

Jak wynika z innych odpowiedzi, zmiana profilu użytkownika (np. 'domyślny' Profil) odpowiednio doprowadzi do tego, że hasła, które raz ustawione, nigdy nie wygasną.

Jednak, jak zauważa jeden z komentatorów, hasła ustawione pod starymi wartościami profilu mogą już wygasnąć, a (jeśli po określonym okresie prolongaty profilu) Konto zostanie zablokowane.

Rozwiązaniem dla wygasłych haseł z zablokowanymi kontami (zgodnie z komentarzem odpowiedzi) jest użycie jednej wersji ALTER Polecenie użytkownika:

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, tzn. gdzie hasło wygasło, ale konto nie jest jeszcze zablokowane. Dla tych kont hasło musi zostać zresetowane inną wersją 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 aktualnego istniejącego zahaszowana wartość przechowywana w bazie danych.

EDIT: starsze wersje Oracle przechowują hasło lub hash hasła w kolumnie psword, nowsze wersje Oracle przechowują hash hasła w kolumnie spare4. Poniższy skrypt został zmieniony, aby zbierać kolumny psword i spare4, ale aby użyć kolumny spare4 do zresetowania konta użytkownika; Modyfikuj 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';
 40
Author: Kieron Hardy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-10 20:26:18

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

 16
Author: akf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-08 02:42:15

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

Jednakże, jeśli tego chcesz.

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

SELECT username, account_status FROM dba_users;

To powinno dać ci taki rezultat.

   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ć Pedro Carriço odpowiedz https://stackoverflow.com/a/6777079/2432468

 0
Author: Pawan Kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:46

Dla tych, którzy używają Oracle 12.1.0 do celów rozwojowych:
Odkryłem, że powyższe metody nie będą miały wpływu na db user: "system", ponieważ account_status pozostanie w wygasłym okresie karencji.

Najprostszym rozwiązaniem było dla mnie użycie programisty SQL:
w SQL Developer musiałem przejść do: View / DBA / Security a potem Users / System a potem po prawej stronie: Actions / Expire pw a potem: Actions / Edit i mogłem odkleić opcję dla przeterminowane.

To wyczyściło account_status, pokazuje otwarte ponownie, a programista SQL nie wyświetla już komunikatu ORA-28002.

 0
Author: Peter Grabowski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-09-08 10:50:00