본문 바로가기
학교 전공/데이터베이스

데이터베이스 개론(3판) - 11장 보안과 권한 관리

by 응가1414 2023. 12. 6.

11장 보안과 권한 관리

1. 보안

<그림 11-1 데이터베이스 보안의 유형>

  1. 물리적 환경에 대한 보안

    • 자연 재해처럼 데이터베이스에 물리적으로 손실을 발생시키는 위험으로부터 데이터베이스를 보호해야 한다.
  2. 권한 관리를 통한 보안

    • 접근이 허락된 사용자만 부여된 권한 내에서 데이터베이스를 사용할 수 있도록 한다.
    • 그러려면 계정이 발급된 사용자만 데이터베이스에 접근할 수 있도록 통제
    • 사용자별로 데이터베이스의 사용 범위와 수행 가능한 작업 내용을 제한할 수 있어야한다.
  3. 운영 관리를 통한 보안

    • 접근이 허락된 사용자가 부여된 권한 내에서 데이터베이스를 사용하더라도 실수 등의 이유로 데이터 무결성을 위반할 수 있다.

2. 권한 관리

2.1 권한 관리의 개념

  • 사용자가 로그인에 성공했을 경우에만 데이터베이스에 접근이 가능하도록 하는 접근 제어기을 기본으로 제공한다.
  • 그러므로 모든 사용자는 자신에게 발급된 계정으로 로그인해야 데이터베이스에 접근 할 수 있다.
  • 보안을 위한 데이터 단위는 데이터베이스 전체부터 특정 테이블의 특정 행과 열 위치에 있는 특정 데이터 값에 이르기까지 다양한다.
  • 각 사용자는 자신에게 허용된 권한 내에서만 데이터베이스를 사용할 수 있다.

<그림 11-3 로그인과 데이터베이스 접근 권한>

  • 객체가 사용자별로 관리되므로 데이터베이스에 접근이 허락된 사용자일지라도 자신이 생성하지 않은 객체는 사용할 수 없다.
  • 데이터베이스 객체의 소유자는 필요에 따라 다른 사용자에게 자신이 소유한 객체에 대한 사용 권한을 부여할 수 있다.
  • 그리고 권한들의 그룹인 역할이라는 것을 이용해 권한을 부여하는 작업을 좀 더 편리하게 수행하는 방법을 알아보자.

<그림 11-4 권한 관리를 통한 보안>

2.2 권한의 부여

  • 객체의 소유자가 다른 사용자에게 객체에 대한 사용 권한을 부여하기 위해 필요한 SQL명령어는 GRANT이다.
    GRANT 권한 ON 객체(Table) TO 사용자 [WITH GRANT OPTION];  -- 권한 부여
  • 테이블을 대상으로 하는 권한 부여를 중심으로 설명한다.
  • 다른 사용자에게 부여할 수 있는 주요 권한은 INSERT, DELETE, UPDATE, SELECT, REFERENCE 가 있다
- REFERENCES : 권한 부여 대상인 테이블의 기본키를 참조하는 외래키를 자신이 생성하는 테이블에 포함
- GRANT : 기본적으로 테이블을 구성하는 모든 속성에 권한을 부여
- UPDATE 와 SELECT : 테이블을 구성하는 속성들 중 일부 속성만 수정 또는 검색하는 권한을 부여
                                        ()안에 부여하고 싶은 속성의 이름을 나열
- PUBLIC : 모든 사용자에게 권한을 똑같이 부여하고 싶으면 PUBLIC 키워드를 이용하여 GRANT 문을 작성한다

<그림 예제 11-1>

GRANT SELECT ON 고객 TO Hong;

<그림 예제 11-2>

GRANT INSERT, DELETE ON 고객 TO PUBLIC; -- 모든 사용자

<그림 예제 11-3>

GRANT UPDATE(등급, 적립금) ON 고객 TO Park;

<그림 예제 11-4>

GRANT SELECT ON 고객 TO Lee WITH GRANT OPTION;
  • 보안을 강화하기 위해 뷰를 이용할 수도 있다.
  • 필요한 테이블의 일부분을 뷰로 생성한 후 사용자에게 이 뷰에 대한 권한을 부여하는 것도 보안을 유지하는 데 도움이 될 수 있다.

시스템 권한

  • 특정 객체에 대한 작업이 아닌, 데이터베이스 관리와 관련된 작업에 대한 권한다.

정의어(DDL)

  • CREATE TABLE, 뷰를 생성할 수 있는 CREATE VIEW 등 데이터 정의어(DDL)와 관련된 작업에 대한 권한들이 시스템 권한에 속한다.

<그럼 예제 11-5>

GRANT CREATE TABLE TO Song;

<예저 11-6>

GRANT CREATE VIEW TO Shin; - 뷰를 생성할 수 있는 권한

2.3 권한의 취소

  • 사용자가 자신이 부여한 권한을 취소할수 있다.
  • 객체의 사용 권한을 취소하기 위해 필요한 SQL 명령어는 REVOKEek.
REVOKE 권한 ON 객체 FROM 사용자 CASCADE | RESTRICT;
  • CASCADE : 부여 받는 사용자 전체 모두 변경
  • RESTRICT 선택된 객체(테이블)만 가능
  • WITH GRANT OPTION과 함께 Hong에게 부여했고, Hongdmㄴ 부여받은 권한을 Parkdp게 부여 했다고 가정한다.

<그림 11-5>

  • Kim -> Hong -> Park
  • 에게 부여된 검색 권한은 어떻게 처리할까?
  • A가 자용자 B 뿐 아니라, C 에게 부여한 권한도
  • 연쇄적으로 함께 취소하고자 한다면 REVOKE 문을 작성할 때 CASCADE 옵션을 지정한다.
  • A가 사용자 C에게 부여한 권한은 취소하지 않도록 하려면 RESTRIC 옵션을 지정한다

<예제 11-7>

REVOKE SELECT ON 고객 FROM Hong CASCADE;
  • 이렇게 A에 B에게 부여한 고객 테이블에 대한 검색 권한을 취소하면
  • C에게 부여했던 검색 권한도 함께 취소

<예제 11-8>

REVOKE SELECT ON 고객 FROM Hong RESTICT;
  • RESTRICT 옵션을 포함한 REVOKE 문을 작성항 수행하면 Kim(A)이 Hong(B)에게 부여한 권한을 취소할 수 없게 된다.
  • Hong(B)이 Park(C)에게 권한을 부여한 내용이 남아 있기 때문이다.
  • CASCADE 옵션을 포함하여 권한을 취소하면 연관된 다른 사용자들의 권한도 함께 취소 되므로 신중하게

<표11-1> 고객 테이블에 대한 각 사용자의 권한 목록

<예제 11-9>

REVOKE CREATE TABLE FROM Hong;

2.4 역할의 부여와 취소

  • 여러 사용자에게 동일한 권한들을 부여하고 취소하는 작업을 편하게 해주는 것이 역할(role)이다.

<그림 11-6> 3개의 권한을 사용자 세 명에게 부여하는 예


  • CREATE ROLE 문의 기본 형식
CREATE ROLE 롤이름;

<예제 11-10>

CREATE ROLE role_1; -- DBA가 역활 생성
  • CREATE ROLE 문은 데이터베이스 관리자가 작성하여 수행해야한다.

  • GRANT 명령어를 이용한다.
  • 역할에 객체와 관련된 권한을 넣는 작업객체의 소유자가 담당한다.
GRANT 권한 ON 객체 TO 롤이름

<예제 11-11>

GRANT SELECT, INSERT, DELETE ON 고객 TO role_1; -- 테이블 소유자가 테이블의 권한을 ROLE에 부여한다.
  • Role_1역할에 고객 테이블에 대한 검색-삽입-삭제 권한을 부여하는 것은 고객 테이블의 소유자가 할 수 있는 작업이다.
GRANT 롤이름 TO 사용자;

  • 사용자에게 권한 부여(DBA)

<예제 11-12>

GRANT role_1 TO Hong; -- 사용자가에게 ROLLE의 권한을 부여한다.
  • GRANT문을 데이터베이스 관리자(DBA)가 수행한다.
  • Role_1역할을 부여받은 사용자는 role_1역할에 포함된 SELECT, INSERT, DELETE 권한을 모두 부여받아 고객 테이블에 대한 검색-삽입-삭제 연산이 가능하다.
  • 검색-삽입-삭제 권한을 Hong, Park, Lee 사용자엑 모두 부여할 때는

<예제 11-10>에서 생성한 role_1 역할을 이용하면 된다.

<11-8> 역할을 이용한 3개의 권한을 세 명의 사용자에게 부여하는 예


  • GRANT 문을 이용하여 role_1 역할에 UPDATE 권한을 다음과 같이 추가해주면 role_1 역할을 이미 부여받은 세명의
  • 사용자에게 UPDATE 권한이 자동으로 부여된다.
GRANT UPDATE ON 고객 TO role_1;

  • 사용자에게 부여한 역할을 취소하는 작업은 DBA가 담당하며
  • 권한 취소처럼 REVOKE 문을 이용한다.
  • 역할(ROLE)을 취소하는 REVOKE 문의 기본 형식은 다음과 같다.
REVOKE 롤이름 FROM 사용자;

  • 역할 제거는 데이터베이스 고나리자가 담당하며 DROP ROLE문을 이용한다.
  • 역할을 제거하는 DROP ROLE 문의 기본 형식은 다음과 같다.
DROP ROLE 롤이름;
DROP ROLE role_1;

요약

1. 데이터베이스 보안의 목표

  • 조직에서 허가한 사용자만 데이터베이스에 접근할 수 있도록 통제하여 보안을 유지하는 것이다.

2. 데이터베이스 보안 유형

  • 물리적 환경에 대한 보안 : 물리적 손실을 발생시키는 위험으로부터 DB을 보호
  • 권한 관리를 통한 보안 : 접근이 허락된 사용자만 권한 내에서 데이터베이스를 사용하도록 보호
  • 운영 관리를 통한 보안 : 무결성 제약조건을 정의하고 이 제약조건을 위반하지 않도록 통제한다.

3. 권한 부여와 취소

  • GRANT 문 : 다른 사용자에게 객체에 대한 사용 권한 부여
  • REVOKE 문 : 다른 사용자에게 부여된 객체에 대한 권한 취소

4. 역할

  • 권한 부여와 취소등의 관리를 편리하게 수행할 수 있도록 여러 권한을 그룹으로 묶어 놓은것
  • CREATE ROLE : 데이터베이스 관리자가 새로운 역할 생성
  • GRANT 문 : 객체의 소유자가 역할에 객체에 대한 권한 추가.

5. 역할의 부여와 취소

  • DBA가 역할을 부여(GRANT)하거나 취소(REVOKE)한다.
  • GRANT : 다른 사용자에게 역할 부여
  • REVOKE : 사용자에게 부여된 역할 취소