티스토리 뷰
오라클 롤(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';
- dev_role라는 롤을 생성
- CREATE SESSION, CREATE TABLE, CREATE VIEW 시스템 권한 부여
- hr.employees 테이블에 대한 SELECT, INSERT 오브젝트 권한을 롤에 부여
- 사용자(MYUSER)에게 해당 롤(dev_role)을 GRANT
- 부여된 권한들을 조회해 확인
이렇게 하면, MYUSER는 dev_role 롤을 통해 DB 접속, 테이블 생성, HR.EMPLOYEES 테이블 SELECT/INSERT가 가능합니다.
정리
- 롤 생성: CREATE ROLE role_name;
- 롤에 권한 부여: GRANT <권한들> TO role_name;
- 롤을 사용자에게 부여: GRANT role_name TO user_name;
- 조회: DBA_ROLES, DBA_ROLE_PRIVS, ROLE_SYS_PRIVS, ROLE_TAB_PRIVS 등 시스템 뷰 활용
롤을 사용하면 여러 권한을 논리적으로 묶어서 관리할 수 있으므로, 규모가 커질수록 권한 관리가 간편해집니다. 다만 DDL 시에는 롤 권한을 바로 사용하지 못하는 경우가 있으므로(예: 직접 사용자에게 DDL 권한을 줘야 할 때가 있음), 이 점은 유의하셔야 합니다.
- #체력시험준비
- #psat
- #면접준비
- #경찰시험
- #체력단련
- #경력경쟁채용
- #9급공무원
- #경찰공무원 #경찰특채 #경찰경력채용 #경찰시험 #경찰응시자격 #경찰공무원되는법 #특수경찰 #전문경찰 #경찰채용정보 #공무원시험 #경찰특공대 #사이버수사대 #변호사경찰 #회계사경찰 #경찰항공대
- #공무원체력
- #공무원채용
- #소방공무원준비
- #해양경찰특채
- #경찰채용
- #체력시험
- #경찰특채
- #it공무원
- #기관사특채
- #의무경찰
- #해양경찰공무원
- #소방관되는법
- #정보통신직공무원
- #소방시험
- #해양경찰시험
- #해기사
- #특별채용
- #전의경특채
- #7급공무원
- #항해사특채
- #필기시험
- #공무원시험
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |