티스토리 뷰

오라클 롤(Role)권한 사용 방법(생성 및 조회 등)

 

Oracle에서는 권한(Privilege) 관리를 편리하게 하기 위해 **Role()**이라는 개념을 제공합니다. 롤은 여러 권한(시스템 권한, 오브젝트 권한, 다른 롤)을 묶어서 일괄적으로 사용자에게 부여할 수 있는권한 집합역할을 합니다

 

1. (Role) 생성

1.1 기본 구문

CREATE ROLE <role_name>

    [IDENTIFIED BY <password>

     | EXTERNAL

     | GLOBAL];

 

 

 

  • role_name: 생성할 롤의 이름
  • IDENTIFIED BY password: 롤에 패스워드를 설정해, 사용자(또는 다른 롤)에게 이 롤을 부여할 때 패스워드 인증을 요구할 수 있습니다.
  • EXTERNAL: OS 인증 등을 통해 롤이 부여되는 방식. (자주 쓰이지 않음)
  • GLOBAL: LDAP 디렉토리 서버 등과 연동해 글로벌 롤로 관리하는 방식. (고급 기능)

일반적으로 롤 생성 시 패스워드를 따로 설정하지 않는 경우가 많아

CREATE ROLE role_name;

 이렇게 간단히 만듭니다.

2. 롤에 권한 부여

2.1 시스템 권한(System Privileges) 부여

sql

 

GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW

  TO <role_name>;

  • 시스템 권한: ) CREATE SESSION, CREATE TABLE, CREATE VIEW, UNLIMITED TABLESPACE, SELECT ANY TABLE
  • 이렇게 GRANT한 권한들은 해당 롤에 속하게 됩니다.
  • 롤을 사용자에게 부여하면, 사용자는 롤에 포함된 모든 권한을 얻게 됩니다.

2.2 오브젝트 권한(Object Privileges) 부여

sql

 

GRANT SELECT, INSERT ON <schema_name>.<table_name>

  TO <role_name>;

  • 오브젝트 권한: 테이블, , 시퀀스 등 특정 오브젝트에 대한 권한(: SELECT, INSERT, UPDATE, DELETE, EXECUTE ).
  • 이처럼 롤에 오브젝트 권한을 줄 수도 있습니다.

3. 롤을 사용자에게 부여

롤에 권한을 부여한 뒤, 사용자에게 롤을 GRANT해야 비로소 사용자가 그 롤에 속한 권한을 사용할 수 있습니다.

sql

 

GRANT <role_name> TO <user_name>;

)

sql

 

GRANT dev_role TO myuser;

주의:

  • 롤이 활성화되어야(기본적으로 활성화됨) 사용자가 롤에 포함된 권한을 사용할 수 있습니다.
  • 일부 중요한 권한(: CREATE ANY TRIGGER )롤을 통해서는 동작하지 않고 직접 사용자에게 부여해야 하는 경우가 있습니다(DDL 시 롤 권한은 적용되지 않는 경우가 있음).

4. 롤 조회

4.1 DBA_ROLES

현재 데이터베이스에 정의된 모든 롤을 조회할 수 있습니다.

sql

 

SELECT role, authentication_type

  FROM dba_roles

 ORDER BY role;

  • authentication_type NONE, PASSWORD, EXTERNAL, GLOBAL 등이 나올 수 있습니다.

4.2 DBA_ROLE_PRIVS

어떤 롤이 어떤 사용자(또는 다른 롤)에 의해 부여되었는지 볼 수 있습니다.

sql

 

SELECT grantee, granted_role, admin_option, default_role

  FROM dba_role_privs

 ORDER BY grantee;

  • grantee: 롤이 부여된 대상(사용자나 다른 롤)
  • granted_role: 부여된 롤 이름
  • admin_option: 해당 롤을 다시 다른 계정에게 재부여할 수 있는지 여부
  • default_role: 사용자 로그인 시 기본 활성화되는 롤인지 여부

4.3 ROLE_SYS_PRIVS

해당 롤에 어떤 시스템 권한이 있는지 확인합니다.

sql

 

SELECT role, privilege, admin_option

  FROM role_sys_privs

 ORDER BY role;

  • role: 롤명
  • privilege: 부여된 시스템 권한
  • admin_option: 해당 시스템 권한을 재부여할 수 있는지 여부

4.4 ROLE_TAB_PRIVS

해당 롤에 어떤 오브젝트 권한이 있는지 확인합니다.

sql

 

SELECT role, owner, table_name, privilege, grantable

  FROM role_tab_privs

 ORDER BY role, table_name;

  • role: 롤명
  • owner, table_name: 해당 오브젝트
  • privilege: SELECT, INSERT, UPDATE, DELETE, EXECUTE
  • grantable: 다른 계정에 재부여 가능한지 여부

5. 사용 예시

아래는 간단한 예시 스크립트입니다:

sql

 

-- (1) 롤 생성

CREATE ROLE dev_role;

 

-- (2) 롤에 시스템 권한 부여

GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW TO dev_role;

 

-- (3) 특정 테이블에 대한 SELECT, INSERT 권한 부여

GRANT SELECT, INSERT ON hr.employees TO dev_role;

 

-- (4) 사용자에게 롤 부여

GRANT dev_role TO myuser;

 

-- (5) 부여 결과 확인

SELECT grantee, granted_role

  FROM dba_role_privs

 WHERE grantee = 'MYUSER';

 

SELECT role, privilege

  FROM role_sys_privs

 WHERE role = 'DEV_ROLE';

  1. dev_role라는 롤을 생성
  2. CREATE SESSION, CREATE TABLE, CREATE VIEW 시스템 권한 부여
  3. hr.employees 테이블에 대한 SELECT, INSERT 오브젝트 권한을 롤에 부여
  4. 사용자(MYUSER)에게 해당 롤(dev_role) GRANT
  5. 부여된 권한들을 조회해 확인

이렇게 하면, MYUSERdev_role 을 통해 DB 접속, 테이블 생성, HR.EMPLOYEES 테이블 SELECT/INSERT가 가능합니다.


정리

  1. 롤 생성: CREATE ROLE role_name;
  2. 롤에 권한 부여: GRANT <권한들> TO role_name;
  3. 롤을 사용자에게 부여: GRANT role_name TO user_name;
  4. 조회: DBA_ROLES, DBA_ROLE_PRIVS, ROLE_SYS_PRIVS, ROLE_TAB_PRIVS 등 시스템 뷰 활용

롤을 사용하면 여러 권한을 논리적으로 묶어서 관리할 수 있으므로, 규모가 커질수록 권한 관리가 간편해집니다. 다만 DDL 시에는 롤 권한을 바로 사용하지 못하는 경우가 있으므로(: 직접 사용자에게 DDL 권한을 줘야 할 때가 있음), 이 점은 유의하셔야 합니다.

 

 

 

댓글