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