Amazon RDS for Oracle DB 인스턴스의 마스터 사용자 계정이 잠기지 않도록 하려면 어떻게 해야 합니까?

8분 분량
0

Amazon Relational Database Service(Amazon RDS) for Oracle DB 인스턴스의 마스터 사용자 계정이 잠기지 않도록 하고 싶습니다.

해결 방법

Amazon RDS의 마스터 사용자 계정은 DB 인스턴스를 운영하기 위한 관리 작업을 모니터링, 관리 및 수행하는 데 매우 중요합니다. 이 계정은 첫 번째 데이터베이스 계정이며 데이터베이스를 유지 관리하고 운영하는 데 필요한 관리 역할과 권한을 포함합니다. 마스터 사용자가 각 데이터베이스 엔진에 대해 가져오는 권한 및 역할의 전체 목록은 마스터 사용자 계정 권한을 참조하세요. 마스터 사용자 계정이 잠겨 로그인할 수 없는 경우 관리 기능이 중단되고 중요한 비즈니스 운영에 영향을 줄 수 있습니다. Amazon RDS 콘솔 또는 다른 데이터베이스 계정을 사용하여 마스터 계정에 다시 액세스할 수 있습니다.

근본 원인 파악

마스터 사용자 계정이 잠기는 일반적인 이유 중 하나는 마스터 계정에 사용자 지정 프로필 설정을 적용하는 것입니다. 이러한 설정 중 일부는 다음과 같습니다.

  • FAILED_LOGIN_ATTEMPTS: 마스터 계정에 대한 연속 실패 로그인 시도 횟수가 이 파라미터에 설정된 값을 초과하면 계정이 잠깁니다.
  • PASSWORD_LIFE_TIME: 특정 암호를 사용하는 기간이 이 파라미터에 설정된 값을 초과하면 해당 암호를 사용하여 계정에 로그인할 수 없으며 계정이 만료된 것으로 표시됩니다. 다시 로그인하려면 암호를 재설정해야 합니다. PASSWORD_GRACE_TIME에 대한 값을 설정하고 유예 기간 내에 암호를 변경하지 않으면 암호가 만료되고 추가 연결이 거부됩니다.
  • INACTIVE_ACCOUNT_TIME: 마스터 계정이 이 파라미터에 정의된 연속 일 수 동안 데이터베이스에 로그인하지 않으면 계정이 잠깁니다. 이 파라미터의 최소값은 15일입니다. 최대값은 없습니다.

비밀번호 파라미터에 대한 자세한 내용은 Oracle 설명서의 password_parameters를 참조하세요.

다음 쿼리를 실행해 마스터 사용자 계정의 현재 프로필 설정을 확인하여 계정이 잠긴 이유를 식별합니다.

SELECT
    profile,
    resource_name,
    limit
FROM
    dba_profiles
WHERE
    resource_type = 'PASSWORD'
    AND   profile IN (
        SELECT
            profile
        FROM
            dba_users
        WHERE
            username = 'EXAMPLE-MASTER-USERNAME'
    );

예시:

암호 입력 오류가 한 번만 허용되는 FAILED_LOGIN_ATTEMPTS 설정을 사용하여 프로필을 생성한다고 가정합니다.

SQL> CREATE PROFILE sec_profile LIMIT FAILED_LOGIN_ATTEMPTS 1;
Profile created.

다음 쿼리를 실행하여 마스터 사용자에게 이 프로필을 적용할 수 있습니다.

SQL> ALTER USER EXAMPLE-MASTER-USERNAME PROFILE sec_profile;
User altered.

데이터베이스 연결을 해제하고 SQL*Plus를 종료합니다.

SQL> exit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.12.0.0.0

잘못된 암호로 계정에 로그인합니다.

bash-4.2$ sqlplus EXAMPLE-MASTER-USERNAME@ora
SQL*Plus: Release 19.0.0.0.0 - Production on Tue Sep 14 13:16:33 2021
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
ERROR:
ORA-01017: invalid username/password; logon denied

FAILED_LOGIN_ATTEMPTS가 1로 설정되어 있으므로 추가 로그인이 허용되지 않습니다. 대신 다음과 같은 오류 메시지가 표시됩니다.

bash-4.2$ sqlplus EXAMPLE-MASTER-USERNAME@ora
SQL*Plus: Release 19.0.0.0.0 - Production on Tue Sep 14 13:16:44 2021
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
ERROR:
ORA-28000: The account is locked.

마스터 계정이 PASSWORD_LIFE_TIME 파라미터에 의해 제한되고 동일한 암호를 사용하는 기간이 이 파라미터에 설정된 값을 초과하면 로그인을 시도할 때 아래의 오류 메시지가 표시됩니다.

-bash-4.2$ sqlplus EXAMPLE-MASTER-USERNAME@ora
SQL*Plus: Release 19.0.0.0.0 - Production on Tue Sep 14 20:14:03 2021
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
ERROR:
ORA-28001: the password has expired

마스터 계정 잠금 해제

다음 방법 중 하나를 사용하여 마스터 계정을 잠금 해제할 수 있습니다.

Amazon RDS 콘솔 또는 AWS Command Line Interface(AWS CLI) 사용

암호를 재설정하면 계정 잠금을 해제하고 만료된 계정을 다시 열 수 있습니다. 자세한 내용은 마스터 사용자의 잠금을 해제하기 위해 Amazon RDS DB 인스턴스의 마스터 사용자 암호를 재설정하려면 어떻게 해야 하나요?를 참조하세요.

다른 데이터베이스 계정 사용

ALTER USER 권한이 있는 다른 데이터베이스 계정(예: EXAMPLE-USER)이 이미 있는 경우 해당 계정을 사용하여 마스터 사용자 계정의 잠금을 해제할 수 있습니다.

다음 쿼리를 실행하여 ALTER USER 권한이 있는 계정을 식별합니다.

SELECT
    grantee,
    privilege
FROM
    dba_sys_privs
WHERE
    privilege = 'ALTER USER'
    AND grantee IN (
        SELECT
            username
        FROM
            dba_users
        WHERE
            oracle_maintained = 'N'
    );

출력은 다음과 유사합니다.

GRANTEE                                                                     PRIVILEGE
--------------------------------------------------------------------------------------------------------------------------------
EXAMPLE-USER                                                                ALTER USER

다음 쿼리를 실행하여 역할을 통해 권한이 부여된 계정을 식별합니다.

SELECT DISTINCT
    dba_users.username
FROM
    dba_role_privs
    JOIN dba_users ON dba_role_privs.grantee = dba_users.username
                      AND granted_role IN (
        SELECT
            role
        FROM
            role_sys_privs
        WHERE
            privilege = 'ALTER USER'
    )
        AND dba_users.oracle_maintained = 'N'

출력은 다음과 유사합니다.

USERNAME
-----------------------------------------------------------------------------------
EXAMPLE-MASTER-USERNAME
RDSADMIN
USER1
EXAMPLE-USER

참고: RDS 내부 계정이므로 출력에서 RDSADMIN은 무시합니다.

계정 EXAMPLE-USER를 사용하여 데이터베이스에 연결합니다.

-bash-4.2$ sqlplus EXAMPLE-USER@ora
SQL*Plus: Release 19.0.0.0.0 - Production on Tue Sep 14 13:35:55 2021 Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle.  All rights reserved.
Last Successful login time: Tue Sep 14 2021 13:33:23 +00:00
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.12.0.0.0

다음 쿼리를 실행하여 마스터 사용자 계정의 잠금을 해제합니다.

SQL> ALTER USER EXAMPLE-MASTER-USERNAME ACCOUNT UNLOCK;
User altered.

암호가 만료된 경우 다음 쿼리를 실행하여 암호를 재설정합니다.

SQL> ALTER USER EXAMPLE-MASTER-USERNAME IDENTIFIED BY EXAMPLE-MASTER-USER-NEW-PWD;
User altered.

데이터베이스 EXAMPLE-USER의 연결을 해제하고 SQL*Plus를 종료합니다.

SQL> exit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.12.0.0.0

마스터 사용자 계정으로 로그인할 수 있습니다. 다음과 같은 메시지가 표시됩니다.

bash-4.2$ sqlplus EXAMPLE-MASTER-USERNAME@ora
SQL*Plus: Release 19.0.0.0.0 - Production on Tue Sep 14 13:36:36 2021
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Last Successful login time: Tue Sep 14 2021 13:35:12+00:00
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.12.0.0.0
SQL> SHOW USER;
USER is "EXAMPLE-MASTER-USERNAME"

마스터 계정의 암호를 재설정할 수 없음: 특정 상황에서 마스터 계정이 암호를 재설정하지 못하도록 차단되었을 수 있습니다.

예제 1:

마스터 계정에 동일한 암호를 PASSWORD_REUSE_MAX 파라미터로 정의된 횟수보다 많이 사용하는 경우 Amazon RDS 콘솔에 다음 이벤트가 표시됩니다.

Unable to reset your password. Error information: ORA-28007: the password cannot be reused ORA-06512: at line 1

RDS 인스턴스의 최신 이벤트를 보려면 Amazon RDS 이벤트 보기를 참조하세요.

이 문제를 해결하려면 Amazon RDS 콘솔을 사용하여 마스터 계정의 암호를 과거에 사용되지 않은 새 암호로 재설정합니다. 또한 ALTER USER 권한이 있는 다른 데이터베이스 계정이 있는 경우 해당 계정에 로그인하여 암호를 변경할 수 있습니다. 허용된 경우 마스터 계정 프로필의 PASSWORD_REUSE_MAX를 UNLIMITED로 업데이트하여 암호를 여러 번 재사용할 수 있습니다.

예제 2:

마스터 계정에 엄격한 암호 정책을 확인하는 PASSWORD_VERIFY_FUNCTION 파라미터 설정(예: 암호의 최소 길이 또는 최소 문자 수 사용 요구 사항)이 있다고 가정합니다. 암호를 재설정하려고 할 때 암호가 정의된 규칙을 충족하지 않는 경우 다음 오류가 발생할 수 있습니다.

ORA-28003: password verification for the specified password failed.

이 문제를 해결하려면 PASSOWRD_VERIFY_FUNCTION에 정의된 규칙이 새 암호에 맞는지 확인합니다.

마스터 사용자 계정이 잠기지 않도록 방지

조직 보안 정책에서 허용하는 경우 RDS 마스터 사용자 계정에 대한 사용자 지정 프로필을 설정하지 말고 DEFAULT 프로필을 유지합니다. DEFAULT 프로필을 사용하면 마스터 사용자 계정에서 로그인 시도 실패 횟수가 무제한으로 설정됩니다. 또한 마스터 사용자 계정의 암호는 비활성 상태로 인해 만료되거나 비활성화되지 않습니다. 하지만 Amazon RDS 콘솔을 사용하여 주기적으로 암호를 재설정하는 것이 가장 좋습니다.

다음 쿼리를 실행하여 DEFAULT 프로필의 제한 사항을 볼 수 있습니다.

SELECT
   resource_name,
   limit
FROM
   dba_profiles
WHERE
   resource_type = 'PASSWORD'
   AND profile = 'DEFAULT'
   AND resource_name IN
   (
      'FAILED_LOGIN_ATTEMPTS',
      'PASSWORD_LIFE_TIME',
      'PASSWORD_VERIFY_FUNCTION',
      'INACTIVE_ACCOUNT_TIME',
      'PASSWORD_REUSE_TIME',
      'PASSWORD_REUSE_MAX'
   );

출력은 다음과 유사합니다.

RESOURCE_NAME                    LIMIT
-------------------------------- --------------------------------------------------------------------------------------------------------------------------------
FAILED_LOGIN_ATTEMPTS            UNLIMITED
PASSWORD_LIFE_TIME               UNLIMITED
PASSWORD_REUSE_TIME              UNLIMITED
PASSWORD_REUSE_MAX               UNLIMITED
PASSWORD_VERIFY_FUNCTION         NULL
INACTIVE_ACCOUNT_TIME            UNLIMITED

6 rows selected.

마스터 계정에 사용자 지정 프로필이 있는 경우 DEFAULT 프로필을 사용하도록 계정을 전환합니다.

다음 쿼리를 실행하여 마스터 계정의 현재 프로필을 확인합니다.

SELECT PROFILE FROM dba_users WHERE USERNAME = 'EXAMPLE-MASTER-USERNAME';

다음 쿼리를 실행하여 마스터 계정의 프로필을 DEFAULT로 변경합니다.

SQL> ALTER USER EXAMPLE-MASTER-USERNAME PROFILE default;
User altered.

참고: DEFAULT 프로필 암호 파라미터를 수정한 경우 로그인에 영향을 줄 수 있는 파라미터에 대한 기본 프로필을 초기 설정으로 다시 재설정하세요. 이를 수행하기 위해 다음 명령을 사용합니다.

SQL> ALTER PROFILE default LIMIT
  failed_login_attempts UNLIMITED password_life_time UNLIMITED
  inactive_account_time UNLIMITED;
Profile altered.

제한된 설정으로 마스터 계정 암호를 재설정해야 하는 정책이 조직에 있는 경우 다음 모범 사례를 따라야 합니다.

  • PASSWORD_LIFE_TIME 설정으로 인해 암호가 만료되기 전에 Amazon RDS 콘솔을 사용하여 주기적으로 암호를 재설정합니다.
  • 암호 확인에 대한 엄격한 요구 사항이 있는 PASSWORD_VERIFY_FUNCTION이 있는 경우 새 암호를 설정할 때 이러한 요구 사항을 준수해야 합니다.
  • INACTIVE_ACCOUNT_TIME 설정을 기반으로 마스터 사용자 계정이 활성화된 상태로 유지되도록 마스터 사용자 계정을 사용합니다.

로그인 시도 실패 횟수 추적

Oracle의 감사 기능을 사용하여 마스터 계정에 대한 로그인 시도 실패 횟수를 추적할 수 있습니다. 이렇게 하려면 RDS for Oracle 인스턴스에 대한 Oracle 초기화 파라미터 audit_traildb로 수정합니다. DB 인스턴스의 사용자 지정 파라미터 그룹에서 이 파라미터를 수정할 수 있습니다.

RDS for Oracle 인스턴스가 기본 파라미터 그룹을 사용하는 경우 파라미터 값을 변경할 수 없습니다. 새 사용자 지정 파라미터 그룹을 생성하고 파라미터 값을 설정한 다음 새로 생성된 파라미터 그룹을 인스턴스에 연결해야 합니다. 그런 다음 인스턴스를 재부팅하여 새 파라미터 그룹을 인스턴스에 연결합니다. 자세한 내용은 Amazon RDS DB 파라미터 그룹의 값을 어떻게 수정합니까?를 참조하세요.

사용자 지정 파라미터 그룹에서 파라미터를 수정한 후 RDS 인스턴스를 재부팅해야 합니다. 이는 audit_trail 파라미터가 정적이므로 RDS for Oracle 데이터베이스를 재부팅해야 적용되기 때문입니다. 자세한 내용은 DB 인스턴스 재부팅을 참조하세요.

RDS 인스턴스의 상태가 사용 가능으로 바뀌면 마스터 계정 또는 감사 권한이 있는 계정을 사용하여 데이터베이스에 로그인합니다. 로그인 시도 실패 횟수 감사를 아직 구성하지 않은 경우 다음 명령을 실행하여 로그인 시도 실패 횟수에 대한 감사를 켭니다.

AUDIT SESSION WHENEVER NOT SUCCESSFUL;

그리고 다음 쿼리를 실행하여 마스터 계정의 로그인 시도 실패 횟수를 추적합니다.

참고: WHERE 절에서 EXAMPLE-USER를 제거하여 모든 데이터베이스 계정에 대해 이 데이터를 추적할 수 있습니다.

SELECT username,
       os_username,
       userhost,
       TO_CHAR(timestamp, 'MON-DD-YYYY HH24:MI:SS') what_time
FROM   dba_audit_trail
WHERE  returncode = 1017
       AND username = 'EXAMPLE-USER';

Oracle 설명서의 CREATE PROFILE