개발자 끄적끄적

사용자 권한 본문

데이터 베이스

사용자 권한

햏치 2023. 4. 7. 00:36

<데이터베이스에서의 사용 권한>
- 사용자가 특정 객체에 대해 특정 연산을 실행할 수 있는 권리
- 특정 객체
  - 테이블 부, 필드 등 데이터베이스의 구성 요소

- 권한 제어가 가능한 연산의 종류
  - 데이터의 접근권한 연산(DML)
     - SQL의 select, insert, delete, update 등
  
  - 스키마 관련 연산(DDL)
    - 스키마를 수정하는 연산
    - create table, alter table, drop table, create index 등


<권한에 따른 사용자 분류>
- 데이터베이스 관리자(DBA)
  - DBMS내의 모든 객체에 대해 모든 권한
  - 객체에 대한 연산, 객체의 제거와 변경을 포함
  - 다른 사용자에게 해당 객체에 대한 권한을 부여하거나 회수

- 객체 소유자(owner)
  - 특정 사용자가 객체를 생성한 사용자
  - 생성한 객체에 대해 모든 권한(해당 객체에 대한 권한의 부여나 회수도 포함)

- 기타 사용자
  - 기본적으로 객체에 대한 일체의 사용권한이 없다
  - 다만 데이터베이스 관리자나 객체 소유자로부터 일부 또는 모든 권한을 별도로 부여받을 수 있다



<SQL에서의 권한 제어 - GRANT>
- GRANT
  - 권한을 부여하는 명령
  - 형식
    - grant<권한리스트>on<객체명>to<사용자리스트>

- <권한리스트> : 권한의 종류에 대한 리스크
  - select, insert, delete, update, reference 중 한 개 이상
  - <객체명> : 대상이 되는 객체
  - <사용자리스트> : 권한을 부여받는 사용자들의 리스트
  - <사용자리스트>에게 <객체명>에 대한 <권한리스트>를 실행할 권리를 부여한다는 의미

- ex) ID kim인 사용자에게 student 테이블에 대해 select 연산을 수행할 수 있는 권한을 부여
  grant select on student to kim 

- ex) kim에게 select와 delete 권한을 부여
  grant select, delete on student to kim

- <권한리스트>에서 select와 update는 특별히 테이블내의 특정 필드에 대해서만 연산을 허용할 수 있다

- ex) student 테이블에서 stu_id에 대해서만 select 연산을 허용
  grant select(stu_id) on student to kim

- referenece 권한
  - 권한이 없으면 kim이 생성한 student는 department를 외래키로 참조하지 못한다

- referenct 권한 부여 ex)
  grant references(dept_id) on department to kim
  - dep_id는 테이블 department의 기본키
  - kim은 department 테이블을 참조하는 외래키를 포함하는 테이블 생성이 가능

- 모든 사용자에게 권한을 부여
  - <사용자리스트>에 public을 사용
  - ex) student에 대해 모든 사용자들에게 select 권한을 부여
  grant select on student to public

- 모든 종류의 구너한을 하나의 명령으로 부여하는 방법
  - all privileges 라는 키워드를 사용
  - ex) grant all privileges on student to lee

- SQL 표준에서는 주로 읽기, 삽입, 삭제, 수정 등 데이터 접근에 관련된 권한만을 정의
- 오라클을 비롯한 일부 DBMS들은 create table, alter table, drop table과 같은 스키마 관련 연산에 대한
   권한도 grant문으로 부여할 수 있는 기능을 제공


<WITH GRANT OPTION>
- SQL에서는 부여받은 권한을 다른 사용자에게 전파할 수 있는 특별한 옵션
- ex)
  grant select on student to kim with grant option
  - student테이블에 대한 select 권한을 kim에게 부여함과 동시에 이 권한을 다른 사용자에게 다시 전파할 수 있는 자격까지 부여
  - ex) kim이 다른 명령 실행 가능
  grant select on yukim.student to chang
    - 단, chang은 더 이상 다른 사용자에게 권한 전파가 불가능

- 권한을 전파할 수 있는 막강한 수단
  - 하지만 이 옵션이 남용될 경우 데이터 보안에 심각한 문제를 야기할 수 있다



<REVOKE>
- 다른 사용자에게 부여한 권한을 회수하기위한 명령
- 형식 
  revoke<권한리스트> on <객체명> from<사용자리스트>
  - <사용자리스트>로 부터 <객체명>에 대한 <권한리스트>연산에 대한 권한을 회수

- ex) kim에게 부여되었던 student 테이블에 대한 select 권한을 회수
  revoke select on student from kim

- 연쇄적인 회수가 되는 상황
- ex) lee가 실행
    grant select on student to kim with grant option
  ex) kim이 실행
    grant select on student to chang
- revoke 문은 kim뿐만 아니라 kim이 권한을 부여한 chang으로 부터도 자동적으로 권한을 회수 
  


<롤(ROLE)>
- 특정 테이블에 대한 권한을 부여할 사용자가 많다면, 반복적으로 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

- ex) 사용자 park를 employee와 manager에 모두 배정
  grant employee, manager to park



<롤에 권한을 부여>
- grant문의 형식과는 동일
- ex) employee에게는 student 테이블에 대해 select 연산을 허용하고, manager에게는 select와 insert 연산을 허용
  grant select on student to employee
  grant select, insert on student to manager



<롤에 부여된 권한을 회수>
- revoke문과 동일
- ex) manager에게 부여된 insert연산을 회수
  revoke insert on student from manager



<배정된 롤에서 사용자를 배제>
- 형식
  revoke <롤리스트> from <사용자리스트>

- ex) 사용자 choi를 manager로부터 배제
  revoke manager from chio



<롤 삭제>
- 형식 
  drop role <롤이름>

- ex) manager를 데이터베이스에서 삭제
  drop role manager



<뷰를 이용한 권한 제어>
- 강력한 보안수단 제공
- 특정 테이블에서 일부 필드 혹은 일부 레코드에 대해서만 접근을 허용할 경우 이 부분들을 뷰로 정의
  - 정의된 뷰에 대해 접근 권한을 부여하고 실제 테이블에 대한 접근을 차단
  - 사용자에게 감추고 싶은 부분에 대한 보안이 자연스럽게 구현
  - 필드뿐만 아니라 레코드 일부에 대해서도 접근제어가 가능
  
- ex)
create view junior
as  select  stu_id, name, year, dept_id
from  student
where  year = 3

grant select on junior to kim

- kim은 junior에 대한 접근은 허용되지만 실제 student 테이블에 대해서는 권한이 없으므로 접근이 차단

'데이터 베이스' 카테고리의 다른 글

무결성 제약  (0) 2023.04.07
SQL문법  (0) 2023.03.28
SQL의 구성(DDL, DML)  (1) 2023.03.25