개발을 위해 Oracle을 사용하고 있습니다. 데이터베이스를 다시 작성하기 위해 항상 사용하는 부트 스트랩 계정의 비밀번호가 만료되었습니다.
이 사용자 (및 다른 모든 사용자)의 암호 만료를 영구적으로 끄려면 어떻게합니까?
암호가 기본적으로 만료되는 Oracle 11g를 사용하고 있습니다.
개발을 위해 Oracle을 사용하고 있습니다. 데이터베이스를 다시 작성하기 위해 항상 사용하는 부트 스트랩 계정의 비밀번호가 만료되었습니다.
이 사용자 (및 다른 모든 사용자)의 암호 만료를 영구적으로 끄려면 어떻게합니까?
암호가 기본적으로 만료되는 Oracle 11g를 사용하고 있습니다.
답변:
Oracle의 특정 사용자 프로필에 대한 비밀번호 만료 정책을 변경하려면 먼저 사용자가 사용중인 프로필을 확인하십시오.
select profile from DBA_USERS where username = '<username>';
그런 다음 다음을 사용하여 제한이 만료되지 않도록 변경할 수 있습니다.
alter profile <profile_name> limit password_life_time UNLIMITED;
이전에 한도를 확인하려면 다음을 사용할 수 있습니다.
select resource_name,limit from dba_profiles where profile='<profile_name>';
select username,expiry_date,account_status from dba_users;
account_status를 봅니다. 만료되는 계정의 경우 마지막으로 비밀번호를 한 번 재설정해야 할 수도 있습니다.
다른 답변 상태에서 사용자 프로필 (예 : 'DEFAULT'프로필)을 적절하게 변경하면 암호가 설정되어 한 번 설정되면 만료되지 않습니다.
그러나 한 의견자가 지적했듯이 프로필의 이전 값으로 설정된 비밀번호는 이미 만료되어있을 수 있으며 (프로파일의 지정된 유예 기간이 지난 경우) 계정이 잠길 수 있습니다.
계정이 잠긴 만료 된 비밀번호에 대한 해결책은 (응답 설명에 제공된대로) ALTER USER 명령의 한 버전을 사용하는 것입니다.
ALTER USER xyz_user ACCOUNT UNLOCK;
그러나 unlock 명령은 계정이 실제로 잠겨있는 계정에 대해서만 작동하지만 유예 기간에있는 계정, 즉 암호가 만료되었지만 계정이 아직 잠겨 있지 않은 계정에는 작동하지 않습니다. 이러한 계정의 경우 다른 버전의 ALTER USER 명령으로 비밀번호를 재설정해야합니다.
ALTER USER xyz_user IDENTIFIED BY new_password;
다음은 권한있는 사용자 (예 : 사용자 'SYS')가 사용자 비밀번호를 데이터베이스에 저장된 현재 해시 값으로 재설정하는 데 사용할 수있는 작은 SQL * Plus 스크립트입니다.
편집 : 이전 버전의 Oracle은 비밀번호 또는 비밀번호 해시를 pword 열에 저장하고 최신 버전의 Oracle은 비밀번호 해시를 spare4 열에 저장합니다. 아래 스크립트는 pword 및 spare4 열을 수집하도록 변경되었지만 spare4 열을 사용하여 사용자 계정을 재설정합니다. 필요에 따라 수정하십시오.
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';
암호 만료 동작은 기본적으로 만료되지 않는 것으로 생각합니다. 그러나 개발자 사용자 집합에 대한 프로필을 설정하고을 설정할 수 PASSWORD_LIFE_TIME
있습니다. 자세한 내용은 orafaq 를 참조하십시오. 한 사람의 관점과 사용법에 대한 예는 여기 를 참조 하십시오 .
기밀성, 무결성 및 데이터 가용성에 위협이 될 수 있으므로 암호 만료를 해제하지 않는 것이 좋습니다.
그러나 당신이 원한다면.
SQL에 따라 적절한 액세스 권한이있는 경우
dba_users에서 사용자 이름, account_status를 선택하십시오.
이것은 당신에게 이런 결과를 줄 것입니다.
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
이제 Pedro Carriço 답변 https://stackoverflow.com/a/6777079/2432468을 사용할 수 있습니다