내용으로 건너뛰기

Amazon RDS for Oracle DB 인스턴스에서 사용자 권한 및 역할을 관리하려면 어떻게 해야 합니까?

6분 분량
0

Amazon Relational Database Service(Amazon RDS) for Oracle DB 인스턴스에서 사용자 권한 및 역할을 관리하고 싶습니다.

간략한 설명

Amazon RDS는 관리형 서비스이므로 기본적으로 SYS 및 SYSTEM 사용자를 사용할 수 없습니다.

Amazon RDS for Oracle 데이터베이스가 마스터 사용자에게 부여하는 역할 및 권한 목록은 마스터 사용자 계정 권한을 참조하십시오. Amazon RDS for Oracle 데이터베이스가 데이터베이스 관리자(DBA) 역할에 부여하지 않는 권한 목록은 Oracle DBA 권한에 대한 제한 사항을 참조하십시오.

해결 방법

참고: 다음 섹션에서 EXAMPLE-USERNAME을 권한을 부여하거나 권한을 취소하려는 사용자 이름으로 바꾸십시오.

권한 부여

SYS 객체에 대한 권한을 부여하려면 rdsadmin.rdsadmin_util.grant_sys_object Amazon RDS 프로시저를 사용하십시오. 이 프로시저는 마스터 사용자에게 이미 있는 권한만 부여합니다.

V_$SQLAREA 객체에 대한 SELECT 권한을 사용자에게 부여하려면 RDS 마스터 사용자로 로그인합니다. 그리고 나서 다음 명령을 실행합니다.

EXECUTE rdsadmin.rdsadmin_util.grant_sys_object( p_obj_name  => 'V_$SQLAREA',p_grantee   => 'EXAMPLE-USERNAME', p_privilege => 'SELECT');

grant 옵션을 사용하여 V_$SQLAREA 객체에 대한 SELECT 권한을 사용자에게 부여하려면 다음 명령을 실행합니다.

EXECUTE rdsadmin.rdsadmin_util.grant_sys_object( p_obj_name  => 'V_$SQLAREA',p_grantee   => 'EXAMPLE-USERNAME', p_privilege => 'SELECT', p_grant_option => true);

참고: 대소문자를 구분하는 식별자로 사용자를 생성한 경우가 아니라면 대문자를 사용하여 모든 파라미터 값을 정의하십시오.

admin 옵션을 사용하여 SELECT_CATALOG_ROLEEXECUTE_CATALOG_ROLE 역할을 사용자에게 부여하려면 다음 명령을 실행합니다.

SQL> GRANT SELECT_CATALOG_ROLE TO EXAMPLE-USERNAME WITH ADMIN OPTION;  
SQL> GRANT EXECUTE_CATALOG_ROLE TO EXAMPLE-USERNAME WITH ADMIN OPTION;

그러면 사용자는 SELECT_CATALOG_ROLEEXECUTE_CATALOG_ROLE 역할이 할 수 있는 것과 동일한 SYS 객체에 대한 액세스 권한을 부여할 수 있습니다.

SELECT_CATALOG_ROLE과 관련된 권한 부여를 보려면 다음 명령을 실행합니다.

SELECT type, owner, table_name, privilege, grantor, grantable FROM dba_tab_privs WHERE grantee = upper('SELECT_CATALOG_ROLE') UNION SELECT 'SYS' AS type, NULL as owner, NULL as table_name, privilege, NULL, admin_option AS grantable FROM dba_sys_privs WHERE grantee = upper('SELECT_CATALOG_ROLE') UNION   
SELECT 'ROLE' AS type, NULL AS owner, NULL AS table_name, granted_role AS privilege, NULL, admin_option AS grantable FROM dba_role_privs WHERE grantee = upper('SELECT_CATALOG_ROLE') ORDER BY type, owner, table_name, privilege;

자세한 내용은 SYS 객체에 SELECT 또는 EXECUTE 권한 부여를 참조하십시오.

단일 객체에 대한 권한을 취소하려면 rdsadmin.rdsadmin_util.revoke_sys_object RDS 프로시저를 사용하십시오.

V_$SQLAREA에 대한 사용자의 SELECT 권한을 취소하려면 다음 명령을 실행합니다.

EXECUTE rdsadmin.rdsadmin_util.revoke_sys_object( p_obj_name  => 'V_$SQLAREA', p_revokee   => 'EXAMPLE-USERNAME', p_privilege => 'SELECT');

자세한 내용은 SYS 객체에 대한 SELECT 또는 EXECUTE 권한 취소를 참조하십시오.

마스터 사용자 권한 재설정

마스터 사용자의 역할 및 권한을 취소한 경우 이를 재설정할 수 있습니다. 자세한 내용은 Amazon RDS DB 인스턴스의 관리자 사용자 암호를 재설정하려면 어떻게 해야 합니까?를 참조하십시오.

마스터 사용자에게 RDS_MASTER_ROLE 부여

마스터가 아닌 사용자에게는 RDS_MASTER_ROLE 역할을 부여할 수 없습니다. DB 인스턴스를 생성할 때 SYS는 기본적으로 RDS_MASTER_ROLE을 생성합니다. RDS_MASTER_ROLE은 마스터 사용자에게만 부여할 수 있습니다. RDS_MASTER_ROLE을 부여한 사용자를 나열하려면 다음 명령을 실행합니다.

SQL> SELECT * FROM sys.dba_role_privs WHERE granted_role = 'RDS_MASTER_ROLE';

출력 예시:

GRANTEE        GRANTED_ROLE        ADM      DEL     DEF     COM     INH--------       ---------------     ---      ---     ---     ---     ---  
MASTER         RDS_MASTER_ROLE     NO       NO      YES     NO      NO  
SYS            RDS_MASTER_ROLE     YES      NO      YES     YES     YES

마스터 사용자에게는 admin 옵션이 없으므로 RDS_MASTER_ROLE을 다른 사용자에게 부여할 수 없습니다. 자세한 내용은 마스터가 아닌 사용자에게 권한 부여를 참조하십시오.

주요 DBMS_* 및 UTL_* 패키지에 대한 PUBLIC 역할 권한 취소

여러 Oracle 애플리케이션은 이 권한을 필요로 하기 때문에 주요 DBMS_* 및 UTL_* 패키지에 대한 PUBLIC 역할 권한을 취소하는 것은 모범 사례가 아닙니다. 주요 DBMS_* 및 UTL_* 패키지에는 UTL_TCP, UTL_HTTP, HTTPURITYPE, UTL_INADDR, UTL_SMTP, DBMS_LDAP, DBMS_LOB, UTL_FILE, DBMS_ADVISOR, DBMS_OBFUSCATION_TOOLKIT, DBMS_BACKUP_RESTORE, DBMS_SYS_SQL이 포함됩니다.

암호가 있는 역할을 생성할 때 발생하는 ‘invalid schema’ 오류 해결

예를 들어, 다음 명령에서 rdsadmin_util.grant_sys_object를 사용하여 암호가 있는 역할을 생성하고 권한을 부여했습니다.

SQL> CREATE ROLE ROLE_NAME IDENTIFIED BY EXAMPLE-PASSWORD;   
SQL> EXEC rdsadmin.rdsadmin_util.grant_sys_object('DBMS_JOB', 'ROLE_NAME');

명령 출력에 다음과 같은 오류가 표시됩니다.

"ORA-20199: Error in rdsadmin_util.grant_sys_object. ORA-44001: invalid schema
ORA-06512: at \"RDSADMIN.RDSADMIN_UTIL", line 268
ORA-44001: invalid schema"

이 문제를 해결하려면 다음 명령을 실행하여 암호 없이 역할을 생성하십시오.

SQL> ALTER ROLE ROLE_NAME NOT IDENTIFIED;

‘ORA-01031: insufficient privileges’ 오류 해결

다음은 ORA-01031 오류가 발생할 수 있는 사용 사례의 예입니다.

ALTER SYSTEM SET 명령을 실행함

ORA-01031 오류는 다음 명령을 실행할 때 발생합니다.

SQL> ALTER SYSTEM SET processes=200 scope=spfile;

기본 DB 파라미터 그룹에서는 파라미터 값을 변경할 수 없습니다. 대신 사용자 지정 DB 파라미터 그룹의 파라미터 값을 수정하십시오.

데이터베이스 트리거를 사용하고 기본 테이블 구조를 변경하여 트리거 상태를 INVALID로 변경함

다음에 이벤트에서 트리거를 해제하면 트리거의 암시적 컴파일이 다음 오류로 실패합니다.

"ORA-04045: errors during recompilation/revalidation of SCOTT.ERROR_LOG_TRIGORA-01031: insufficient privileges"

이 문제를 해결하려면 다음 명령을 실행하여 소유자가 데이터베이스 트리거를 변경할 수 있도록 트리거 소유자에게 데이터베이스 트리거 관리 권한을 명시적으로 부여하십시오.

SQL> GRANT ADMINISTER DATABASE TRIGGER TO example-owner;  
SQL> ALTER TRIGGER example-owner.log_errors_trig COMPILE;

예상 출력:

Trigger altered.

저장 프로시저를 실행함

정의자 권한으로 실행되는 명명된 저장 프로시저의 역할에서 얻은 권한은 사용할 수 없으므로 ‘ORA-01031’ 오류가 발생합니다. 대신 SQL Plus의 역할에서 얻은 권한과 익명 PL/SQL 블록을 사용하십시오.

다음 저장 프로시저는 사용자가 명명된 저장 프로시저에 있는 역할의 권한을 사용하여 테이블을 만들기 때문에 실패합니다. 그러면 사용자는 테이블을 삭제하고 저장 프로시저를 사용하여 동일한 테이블을 만들려고 합니다.

SQL> CREATE USER EXAMPLE-USERNAME IDENTIFIED BY EXAMPLE-PASSWORD;  
SQL> GRANT connect, resource TO EXAMPLE-USERNAME  
SQL> CREATE TABLE dept (deptno NUMBER, deptname VARCHAR2(30));  
Table DEPT created.SQL> DROP table DEPT;  
SQL> CREATE OR REPLACE PROCEDURE test_proc AS  
BEGIN  
    EXECUTE IMMEDIATE 'CREATE TABLE DEPT (DeptNo number, DeptName varchar2(30))';  
END;  
/  
Procedure TEST_PROC created  
SQL> EXEC TEST_PROC

출력에는 다음 오류가 표시됩니다.

"Error report -ORA-01031: insufficient privileges"

이 문제를 해결하려면 마스터 사용자로 연결한 후 다음 명령을 실행하여 CREATE TABLE 권한을 부여하십시오.

SQL> GRANT CREATE TABLE TO test_user;

다음 명령을 실행하여 저장 프로시저를 실행합니다.

SQL> EXEC TEST_PROC

예상 출력:

PL/SQL procedure successfully completed.

grant 옵션을 사용하여 마스터 사용자에게 권한을 부여하지 않음

‘ORA-04043’ 오류는 마스터 사용자에게 객체에 대한 grant 옵션을 사용하여 권한을 부여하지 않을 때 발생합니다.

다음 권한 부여 프로시저의 예는 마스터 사용자에게 DBA_TABLESPACE_USAGE_METRICS 객체에 대한 grant 옵션과 함께 SELECT 권한이 없기 때문에 실패합니다.

SQL> SHOW USER;  
USER is \"EXAMPLE-USERNAME\"  
SQL> SELECT * FROM SYS.DBA_TABLESPACE_USAGE_METRICS;

출력에는 ‘ERROR: ORA-04043: object "SYS"."DBA_TABLESPACE_USAGE_METRICS" does not exist’ 오류 메시지가 표시됩니다.

마스터 사용자가 다른 사용자에게 DBA_TABLESPACE_USAGE_METRICS 객체에 대한 SELECT 권한을 부여하려고 하면 마스터 사용자는 ‘ORA-01031: insufficient privileges’ 오류를 받습니다.

이 문제를 해결하려면 다음 명령을 실행하여 마스터 사용자에게 grant 옵션과 함께 SELECT 권한을 명시적으로 부여하십시오.

SQL> EXECUTE rdsadmin.rdsadmin_util.grant_sys_object( p_obj_name => 'DBA_TABLESPACE_USAGE_METRICS', p_grantee => 'ADMIN', p_privilege => 'SELECT', p_grant_option => true);  
SQL> GRANT SELECT ON SYS.DBA_TABLESPACE_USAGE_METRICS to EXAMPLE-USERNAME;

SELECT 권한을 부여하면 마스터 사용자가 SELECT 명령을 성공적으로 실행할 수 있습니다.

SQL> SELECT * FROM SYS.DBA_TABLESPACE_USAGE_METRICS;

관련 정보

Oracle 웹 사이트에서 권한 및 역할 권한 부여 구성