11. 보안과 권한 관리
데이터 베이스 보안의 개념과 유형을 소개하고 허가된 사용자가 부여된 권한 내에서 데이터베이스에 접근하도록 하는 방법을 학습한다.
11.1. 보안
데이터 베이스의 보안을 유지하여 데이터를 보호하는 방법은 고려하는 측면에 따라 다음 3가지 유형으로 구분한다.
- 물리적 환경에 대한 보안
자연 재해처럼 데이터베이스에 물리적으로 손실을 발생시키는 위험으로부터 데이터베이스를 보호해야 한다. - 권한 관리를 통한 보안
접근이 허락된 사용자만 부여된 권한 내에서 데이터를 사용할 수있도록 텅제한다. - 운영 관리를 통한 보안
접근이 허락된 사용자가 데이터 무결성을 위반하지 않도록, 올바른 제약조건을 정의하고 통제한다.
11.2. 권한 관리
11.2.1. 권한 관리의 개념
데이터베이스 관리자는 데이터베이스 전체의 보안을 관리하기 위해 필요한 모든 권한을 가지고 있다. 테이블이나 뷰에 존재하는 객체는 기본적으로 해당 객체를 생성한 사용자만 사용 권한을 가지고 있다. 긜고 필요에 따라 다른 사람에게 자신이 소유한 객체에 대한 사용 권한을 부여할 수 있다.
데이터베이스에 존재하는 모든 유형의 객체에 사용자 권한을 부여할 수 있지만, 아래 예시에서 객체는 테이블을 중심으로 설명한다.
11.2.2. 권한의 부여
GRANT 권한 ON 객체 TO 사용자 [WITH GRANT OPTION];
-
권한
- INSERT: 삽입
- DELETE: 삭제
- UPDATE: 수정
일부 속성에 대해서 권한을 부여할 경우 UPDATE() 안에 속성을 나열한다 - SELECT: 검색
일부 속성에 대해서 권한을 부여할 경우 SELECT() 안에 속성을 나열한다 - REFERENCES: 외래키 제약조건 정의
사용자는 권한 부여 대상인 테이블의 기본키를 참조하는 필드를 자신이 생성하는 테이블에 포함할 수 있다.
-
사용자
- 모든 사용자에 대해서 권한을 똑같이 부여하고 싶을 경우 PUBLIC 키워드를 사용한다.
-
WITH GRANT OPTION
- 해당 명령어를 포함하면 권한을 부여받은 사용자가 자신이 부여받은 권한을 다른 사용자에게도 부여할 수 있다.
-
예시
- 고객 테이블에 대한 검색 권한을 사용자 Hong에게 부여해보자
GRANT SELECT ON 고객 TO Hong;
- 고객 테이블에 대한 삽입과 삭제 권한을 모든 사용자에게 부여해보자
GRANT INSERT, DELETE ON 고객 TO PUBLIC;
- 고객 테이블을 구성하는 속성 중 등급과 적립급 속성에 대한 수정권한을 사용자 Park에게 부여해보자
GRANT UPDATE(등급, 적립금) ON 고객 TO Park;
- 고객 테이블에 대한 검색 권한을 WITH GRANT OPTION을 포함하여 사용자 Lee에게 부여해보자
GRANT SELECT ON 고객 TO Lee WITH GRANT OPTION;
- 고객 테이블에 대한 검색 권한을 사용자 Hong에게 부여해보자
객체에 대한 권한은 해당 객체의 소유자가 보유하지만 시스템 권한은 데이터베이스 관리자가 부여할 수 있다. 시스템 권한은 특정 객체에 대한 작업이 아닌, 데이터베이스 관리와 관련된 작업에 대한 권한이다.
GRANT 시스템 권한 TO 사용자;
- 시스템 권한
- CREATE TABLE: 테이블 생성
- CREATE VIEW: 뷰 생성
- 예시
- 테이블을 생성할 수 있는 시스템 권한을 사용자 Song에게 부여해보자
GRANT CREATE TABLE TO Song;
- 뷰를 생성할 수 있는 시스템 권한을 사용자 Song에게 부여해보자
GRANT CREATE VIEW TO Song;
- 테이블을 생성할 수 있는 시스템 권한을 사용자 Song에게 부여해보자
11.2.3. 권한의 취소
REVOKE 권한 ON 객체 FROM 사용자 CASCADE|RESTRICT
-
REVOKE 옵션
- CASCADE
권한을 취소하려는 사용자와 연관된 다른 사용자들의 권한들도 함께 취소된다. - RESTRICT
권한을 취소하려는 사용자와 연관된 다른 사용자가 없을 경우에만 권한을 취소한다.
- CASCADE
-
예시
- Kim이 Hong에게 부여한 고객 테이블에 대한 검색 권한을 취소하면서 Hong이 다른 사용자에게 부여한 고객 테이블에 대한 검색 권한도 함께 취소해보도록 해보자.
REVOKE SELECT ON 고객 FROM Hong CASCADE;
- Hong이 다른 사용자에게 자신이 부여받은 권한을 부여한 적이 없는 경우에만 Kim이 Hong에게 부여한 고객 테이블에 대한 검색 권한을 취소해보자
REVOKE SELECT ON 고객 FROM Hong RESTRICT;
- Hong에게 부여한 테이블 생성 권한을 취소해보자
REVOKE CREATE TABLE FROM Hong;
- Kim이 Hong에게 부여한 고객 테이블에 대한 검색 권한을 취소하면서 Hong이 다른 사용자에게 부여한 고객 테이블에 대한 검색 권한도 함께 취소해보도록 해보자.
11.2.4. 역할의 부여와 취소
역할은 여러 권한을 그룹으로 묶어 놓은 것으로, 여러 사용자에게 동일한 권한을 부여하고 취소하는 번거로운 작업을 편리하게 수행할 수 있도록 도움을 준다.
또한 역할이 가지고 있는 역할에 변화가 생겨도 해당 역할을 부여받은 모든 사용자에게 변화가 그대로 전달된다.
-
역할 생성
CREATE ROLE 역할이름;
- role_1이라는 이름의 역할을 생성해보자
CREATE ROLE role_1;
- role_1이라는 이름의 역할을 생성해보자
-
권한 할당
GRANT 권한 ON 객체 TO 역할이름;
- 고객 테이블에 대한 검색, 삽입, 삭제 권한을 role_1 역할에 넣어보자.
GRANT SELECT, INSERT, DELETE ON 고객 TO role_1;
- 고객 테이블에 대한 검색, 삽입, 삭제 권한을 role_1 역할에 넣어보자.
-
역할 부여
GRANT 역할이름 TO 사용자;
- 고객 테이블에 대한 검색, 삽입, 삭제 권한을 포함하고 있는 role_1 역할을 사용자 Hong에게 부여해보자.
GRANT role_1 TO Hong;
- 고객 테이블에 대한 검색, 삽입, 삭제 권한을 포함하고 있는 role_1 역할을 사용자 Hong에게 부여해보자.
-
역할 회수
REVOKE 역할이름 FROM 사용자;
- 사용자 Hong에게 부여한 role_1 역할을 취소해보자
REVOKE role_1 FROM Hong;
- 사용자 Hong에게 부여한 role_1 역할을 취소해보자
-
역할 삭제
DROP ROLE 역할이름;
- role_1 역할을 제거해보자
DROP role_1;
- role_1 역할을 제거해보자
이전 포스트
10. 회복과 병행 제어
다음 포스트