권한 제어가 가능한 연산의 종류
권한에 따른 사용자 분류
형식 : grant <권한리스트> on <객체명> to <사용자리스트>
<권한리스트> : 권한의 종류에 대한 리스트 (select, insert, delete, update, references 중 한 개 이상)
<객체명> : 대상이 되는 객체
<사용자리스트> : 권한을 부여받는 사용자들의 리스트
<사용자리스트>에게 <객체명>에 대한 <권한리스트>를 실행할 권리를 부여한다는 의미
ex) ID Kim인 사용자에게 student 테이블에 대해 select 연산을 수행할 수 있는 권한을 부여
=> grant select on student to Kim
<권한 리스트>에서 select와 update는 특별히 테이블내의 특정필드에 대해서만 연산을 허용할 수 있다.
ex) student 테이블에서 stu_id에 대해서만 select 연산을 허용
=> grant select (stu_id) on student to Kim
references 권한이란?
권한이 없으면 kim이 생성한 student는 department를 외래키로 참조 못 한다.
ex) grant references (dept_id) on department to kim
dept_id는 테이블 department의 기본키
kim은 department 테이블을 참조하는 외래키를 포함하는 테이블의 생성이 가능
모든 사용자에게 권한을 부여하려면?
<사용자리스트>에 public을 사용한다.
ex) student에 대해 모든 사용자들에게 select 권한을 부여한다.
=> grant select on student to public
모든 종류의 권한을 하나의 명령으로 부여하려면?
all privileges라는 키워드를 사용한다.
ex) student 테이블에 대한 모든 권한을 lee에게 부여한다.
=> grant all privileges on student to lee
WITH GRNAT OPTION
SQL에서는 부여받은 권한을 다른 사용자에게 전파할 수 있는 옵션이 있다.
ex) student 테이블에 대한 select 권한을 kim에게 부여함과 동시에 이 권한을 다른 사용자에게 다시 전파할 수 있는 자격까지 부여한다.
=> grant select on student to kim with grant option
kimdl chang에게 student 테이블에 대한 select 권한 부여 가능
=> grant select on student to chang
단, chang은 더 이상 다른 사용자에게 권한 전파 불가능
+) 오라클에서는 with grant option과 with admin option을 모두 지원한다
with grant option : 객체 권한을 다른 사용자에게 전파할 때 사용
with admin option : 시스템 권한을 전파할 때 사용
ex) grant create table to kim with admin option
다른 사용자에게 부여한 권한을 회수하기 위한 명령이다.
형식 : revoke <권한리스트> on <객체명> from <사용자리스트>
<사용자리스트>로부터 <객체명>에 대한 <권한리스트> 연산에 대한 권한을 회수한다.
ex) kim에게 부여되었던 student 테이블에 대한 select 권한을 회수
=> revoke select on student from kim
특정 테이블에 대한 권한을 부여할 사용자가 많다면 반복적으로 grant문이나 revoke을 실행해야 하는 문제가 발생한다.
단순 반복되는 작업을 줄이기 위해 권한별로 사용자 그룹을 만들어 그룹에 권한을 부여하는 방법이 필요하다.
ex) 회사의 구성원들이 사원과 임원으로 구분되고 각각의 보안등급이 다르면 사원 그룹과 임원 그룹으로 나누고 각 그룹에 해당 권한을 부여한다.
롤 (ROLE)
롤의 생성 형식
create role <롤이름>
ex) 사원(employee)과 임원(manager)에 대한 롤을 생성해라
=> create role employee
=> create role manager
롤에 사용자 배정
롤 배정 형식 : grant <롤리스트> to <사용자리스트>
<롤리스트> : 롤 이름의 리스트
<사용자리스트> : <롤리스트>에 포함될 사용자 계정의 리스트
ex)
사용자 lee와 kim은 사원, chang과 choi이 임원으로 배정
=> grant employee to lee, kim
=> grant manager to chang, choi
사용자 park을 employee와 manager에 모두 배정
=> grant employee, manager to park
롤에 권한을 부여
grant문의 형식과 동일
grant <권한리스트> on <객체명> to <롤>
ex) employee에게는 student 테이블에 대해 select 연산을 허용하고 manager에게는 select와 insert 연산을 허용한다.
=> grant select on student to employee
=> grant select, insert on student to manager
롤에 부여된 권한을 회수
revoke문과 동일
형식 : revoke <권한리스트> on <객체명> from <사용자리스트 / 롤>
ex) manager에게 부여된 student 테이블의 insert 연산을 회수
=> revoke insert on student from manaher
롤에서 사용자를 배제
형식 : revoke <롤리스트> from <사용자리스트>
ex) 사용자 choi를 manager로부터 배제
=> revoke manager from choi
롤 삭제
형식 : drop role <롤이름>
ex) manager 롤을 데이터베이스에서 삭제
=> drop role manager
오라클 기본적인 롤 종류