역할은 권한들을 그룹화한 것으로, 여러 권한을 한 번에 관리할 수 있게 해줍니다.
-- 역할 생성
CREATE ROLE 역할명;
-- 역할에 권한 부여
GRANT 권한1, 권한2, ... TO 역할명;
-- 사용자에게 역할 부여
GRANT 역할명 TO 사용자명;
-- 역할 삭제
DROP ROLE 역할명;
-- 새 역할 생성
CREATE ROLE C##app_user;
-- 역할에 권한 부여
GRANT CREATE SESSION, CREATE TABLE TO C##app_user;
GRANT SELECT ON student.room TO C##app_user;
-- 사용자에게 역할 부여
GRANT app_user TO user1, user2, user3;
-- 사용자에게 부여된 시스템 권한 확인
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'USER명';
-- 사용자에게 부여된 객체 권한 확인
SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE = 'USER명';
-- 사용자에게 부여된 역할 확인
SELECT * FROM DBA_ROLE_PRIVS WHERE GRANTEE = 'USER명';
-- 역할에 포함된 권한 확인
SELECT * FROM ROLE_SYS_PRIVS WHERE ROLE = '역할명';
이러한 권한과 역할을 적절히 관리하면 데이터베이스 보안을 효과적으로 유지할 수 있습니다.
GRANT SELECT 구문에서 SELECT 외에 부여할 수 있는 권한(Privileges)은 오라클에서 크게 두 가지로 나뉩니다: 오브젝트 권한과 시스템 권한입니다.
예시:
GRANT INSERT, UPDATE, DELETE ON student.room TO C##app_user;
GRANT ALL ON student.room TO C##app_user;
여러 권한을 쉼표로 구분하여 동시에 부여할 수 있습니다[1][5][6].
예시:
GRANT CREATE SESSION, CREATE TABLE TO C##app_user;
GRANT DBA TO C##app_user;
시스템 권한은 객체가 아닌 사용자에게 직접 부여합니다[2][4][6].
| 권한 종류 | 설명 | 예시 |
|---|---|---|
| SELECT | 데이터 조회 | 테이블, 뷰 |
| INSERT | 데이터 삽입 | 테이블 |
| UPDATE | 데이터 수정 | 테이블, 뷰 |
| DELETE | 데이터 삭제 | 테이블, 뷰 |
| MERGE | 데이터 병합 | 테이블 |
| ALTER | 객체 구조 변경 | 테이블, 뷰 등 |
| INDEX | 인덱스 생성 | 테이블 |
| REFERENCES | 외래키 참조 | 테이블 |
| ALL | 모든 오브젝트 권한 | 테이블, 뷰 등 |
| CREATE SESSION | DB 접속 권한 | 사용자 |
| CREATE TABLE | 테이블 생성 | 사용자 |
| DBA | 모든 권한(관리자) | 사용자 |
필요한 권한에 따라 위 권한들을 조합해서 GRANT 구문에 사용할 수 있습니다.