Oracle 암호 만기를 끄려면 어떻게합니까?


177

개발을 위해 Oracle을 사용하고 있습니다. 데이터베이스를 다시 작성하기 위해 항상 사용하는 부트 스트랩 계정의 비밀번호가 만료되었습니다.

이 사용자 (및 다른 모든 사용자)의 암호 만료를 영구적으로 끄려면 어떻게합니까?

암호가 기본적으로 만료되는 Oracle 11g를 사용하고 있습니다.


serverfault.com에서 이것을 묻는 것이 더 나을 것 같습니다. 개발에 사용한다고 말했기 때문에 강요하지 않을 것입니다. 여기에서 누군가가 알고 있고 / 또는 여기에서 다른 사람들이이 정보의 혜택을 볼 가능성이 여전히 있다고 생각합니다.
Bill the Lizard

난 그냥 그렇게 할 것 같아요. DBA가 아닌 기본 데이터베이스 질문이기 때문에 어느 사이트에 더 적합한 지 토론하고있었습니다.
Josh Kodroff

사이트 간 질문에 대한 속임수 정책이 무엇인지 확실하지 않지만 다음 링크가 있습니다. serverfault.com/questions/37622/…
Josh Kodroff

답변:


313

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

5
이것은 프로필을 변경했습니다. 그러나 기본 프로필을 만들 때 암호가 있었기 때문에 암호가 만료되도록 설정된 사용자가 있습니다. 비밀번호가 만료되지 않도록이 사용자 계정을 어떻게 변경합니까?
Jay Imerman

14
select username,expiry_date,account_status from dba_users; account_status를 봅니다. 만료되는 계정의 경우 마지막으로 비밀번호를 한 번 재설정해야 할 수도 있습니다.
Will Wu

6
사용자 aaa 계정 잠금 해제 변경;
Kalpesh Soni

1
완전성을 위해 사용자를 다른 프로필로 변경해야하는 경우 : ALTER USER Bob PROFILE MyNonExpiringProfile;.

"username = '<username>'; 여기서 DBA_USERS에서 프로파일을 선택하십시오."쿼리에서 선택된 행이 없습니다.
gaurav

90

개발 을 위해 다른 프로파일이 설정되지 않은 경우 비밀번호 정책을 비활성화 할 수 있습니다 (예 : 기본적으로 비밀번호 만료 비활성화).

ALTER PROFILE "DEFAULT" LIMIT PASSWORD_VERIFY_FUNCTION NULL;

그런 다음 비밀번호를 재설정하고 사용자 계정을 잠금 해제하십시오. 다시는 만료되지 않아야합니다.

alter user user_name identified by new_password account unlock;

40

다른 답변 상태에서 사용자 프로필 (예 : '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';

2
도와 주셔서 감사합니다. 관련 답변을 찾기가 너무 어렵습니다. 다른 모든 답변은 PASSWORD_LIFE_TIME에만 해당됩니다.
sabertiger

SYS.USER $ .PASSWORD 열에는 대소 문자를 구분하지 않는 (대문자?) 버전의 암호 해시 만 포함됩니다. Oracle 11에서 시스템 매개 변수 SEC_CASE_SENSITIVE_LOGON = FALSE를 설정하지 않으면 SYS.USER $ .SPARE4 열에 대소 문자 구분 비밀번호의 해시가 훨씬 길어집니다.
Morbo

16

암호 만료 동작은 기본적으로 만료되지 않는 것으로 생각합니다. 그러나 개발자 사용자 집합에 대한 프로필을 설정하고을 설정할 수 PASSWORD_LIFE_TIME있습니다. 자세한 내용은 orafaq 를 참조하십시오. 한 사람의 관점과 사용법에 대한 예는 여기 를 참조 하십시오 .


7
권장되는 향상된 보안 기능을 사용하여 업그레이드와 달리 새로 설치 한 11g 설치에서는 암호가 기본적으로 30 일 후에 만료됩니다.
게리 마이어스


0

기밀성, 무결성 및 데이터 가용성에 위협이 될 수 있으므로 암호 만료를 해제하지 않는 것이 좋습니다.

그러나 당신이 원한다면.

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을 사용할 수 있습니다


프로덕션 환경에서 비밀번호 만료를 비활성화하는 것은 쇄도에 동의하지만 개발 또는 테스트에서 비밀번호 만료를 원할 수 있습니다.
APC
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.