-
[데이터베이스] 보안과 권한 관리IT/데이터베이스 2022. 10. 11. 23:20
본 포스팅은 "데이터베이스 개론 [2판]" 도서로 공부한 내용을 요약하기 위한 포스팅입니다.
1. 보안
데이터베이스에 저장된 데이터는 조직을 운영하는데 꼭 필요한 것으로, 조직 내 사용자들이 공유하여 사용한다.
만약 사용이 허락되지 않은 외부인이 데이터베이스에 침입하여 데이터를 유출하거나 손상한다면 조직에 치명적인 손실이 발생할 것이다. 그러므로 조직에서 허가한 사용자만 데이터 베이스에 접근할 수 있도록 통제하여 보안을 유지하는 일이 무척 중요하다.
데이터베이스의 보안을 유지하여 데이터를 보호하는 방법은 고려하는 측면에 따라 다양하게 구분할 수 있지만, 일반적으로 아래 세 가지 유형으로 구분한다.
2. 권한 관리
데이터베이스 관리 시스템은 데이터베이스의 보안을 유지하기 위해, 계정이 발급된 사용자가 로그인에 성공했을 경우에만 데이터베이스에 접근이 가능하도록 하는 접근 제어(Access control) 기능을 기본으로 제공한다. 또한, 로그인에 성공한 사용자의 경우에 권한이 없는 데이터에는 접근하지 못하도록 하는 권한 관리 기능도 제공한다.
즉, 사용자별로 데이터베이스의 사용 범위와 수행가능한 작업을 제한할 수 있어, 각 사용자는 자신에게 허용된 권한 내에서만 데이터베이스를 사용할 수 있다.
2-1. 권한 관리의 개념
테이블이나 뷰와 같이 데이터베이스에 존재하는 모든 객체는 기본적으로 해당 객체를 생성한 사용자만 사용 권한을 가지게 된다. 즉 객체가 사용자별로 관리되므로 데이터베이스에 접근이 허락된 사용자일지라도 자신이 생성하지 않은 객체는 사용할 수 없다.
데이터베이스 객체의 소유자는 필요에 따라 다른 사용자에게 자신이 소유한 객체에 대한 사용 권한을 부여할 수 있다.
SQL문을 이용해 다른 사용자에게 자신이 생성한 객체에 대한 적절한 수준의 사용 권한을 부여하거나 취소하면 된다.
2-2. 권한의 부여
객체의 소유자가 다른 사용자에게 객체에 대한 사용 권한을 부여하기 위해 필요한 SQL 명령어는 GRANT이다.
GRANT 문의 기본 형식은 아래와 같다.
GRANT 권한 ON 객체[(속성)] TO 사용자 [WITH GRANT OPTION];
데이터베이스에 존재하는 모든 유형의 객체에 사용 권한을 부여할 수 있다. 하지만 일반적으로 테이블에 권한을 부여하는 경우가 많으므로 테이블을 대상으로 하는 권한 부여를 중심으로 알아보자.
테이블 관련하여 다른 사용자에게 부여할 수 있는 주요 권한으로는 INSERT, DELETE, UPDATE, SELECT, REFERENCES가 있는데, 여러 권한을 한 번에 동시에 부여할 수도 있다.
REFERENCES는 외래키 제약 조건을 정의할 수 있는 권한으로 해당 권한을 부여받은 사용자는 권한 부여 대상인 테이블의 기본키를 참조하는 외래키를 자신이 생성하는 테이블에 포함할 수 있다.
WITH GRAND OPTION을 포함하여 권한을 부여하면, 권한을 부여받은 사용자가 자신이 부여받은 권한을 다른 사용자에게도 부여할 수 있다.
예시. 고객 테이블을 구성하는 속성 중 등급과 적립금 속성에 대한 수정 권한을 사용자 Kim에게 부여한다.
Kim은 해당 권한을 타인에게 부여할 수 있다.GRANT UPDATE(등급, 적립금) ON 고객 TO Kim WITH GRANT OPTION;
객체에 대한 권한은 해당 객체의 소유자가 부여하지만 시스템 권한은 데이터베이스 관리자가 부여할 수 있다.
시스템 권한은 특정 객체에 대한 작업이 아닌, 데이터베이스 관리와 관련된 작업에 대한 권한이다.
즉, 테이블을 생성할 수 있는 CREATE TABLE, 뷰를 생성할 수 있는 CREATE VIEW 등 데이터 정의어와 관련된 작업에 대한 권한들이 시스템 권한에 속한다.
데이터베이스 관리자가 시스템 권한을 부여할 때도 GRANT 명령어를 이용하며, 특정 객체에 대한 권한을 부여하는 것이 아니므로 시스템 권한을 부여할 때는 객체를 지정할 필요가 없다.
예시. 뷰를 생성할 수 있는 시스템 권한을 사용자 Kim에게 부여.
GRANT CREATE VIEW TO Kim;
2-3. 권한의 취소
GRANT 명령어를 통해 다른 사용자에게 권한을 부여한 사용자가 자신이 부여한 권한을 취소할 수도 있다.
이때 사용하는 SQL 명령어는 REVOKE이며, 기본 형식은 아래와 같다.
REVOKE 권한 ON 객체 FROM 사용자 CASCADE : RESTRICT;
앞서 권한 부여에서 WITH GRANT OPTION을 포함하여 권한을 부여받은 사용자가 자신이 부여받은 권한을 다른 사용자에게도 부여할 수 있었다. 이 경우 사용자의 권한이 취소되었을 때, 권한이 취소된 사용자가 다른 사용자에게 부여한 권한을 처리하는 방법이 중요한 문제로 남는다.
- CASCADE : 권한을 부여받은 사용자로부터 새롭게 권한을 부여받은 모든 사용자의 권한까지 모두 취소된다.
- RESTRICT : 권한을 부여받은 사용자만 권한이 취소된다.
권한 부여와 동일하게 시스템 권한 역시 REVOKE 명령어를 통해 권한 취소가 가능하다.
2-4. 역할의 부여와 취소
여러가지 권한을 역할로 묶어 한 번에 권한을 부여하는 것도 가능하다.
새로운 역할을 생성하는 기능은 데이터베이스 관리자가 담당하며, 역할을 생성하는 데 필요한 SQL 명령어는 CREATE ROLE이다. CREATE ROLE 문의 기본 형식은 아래와 같다.
CREATE ROLE 롤_이름;
역할에 필요한 권한들을 넣을 때는 GRANT 명령어를 이용한다. 역할에 객체와 관련된 권한을 넣는 작업은 객체의 소유자가 담당한다. 역할에 권한을 넣는 GRANT 문의 기본 형식은 아래와 같다.
GRANT 권한 ON 객체 TO 롤_이름;
예시. role_1이라는 이름의 역할을 생성하고, 고객 테이블에 대한 검색·삽입·삭제 권한을 role_1에 부여
권한이 부여된 역할을 Kim 사용자에게 부여# 역할 생성, 데이터베이스 관리자가 담당 CREATE ROLE role_1; # 역할에 권한 부여, 객체 소유자가 담당 GRANT SELECT, INSERT, DELETE ON 고객 TO role_1; # 역할을 사용자에게 부여, 데이터베이스 관리자가 담당 GRANT role_1 TO 사용자;
이미 생성한 역할에 새로운 권한을 부여하고 싶을 때는 GRANT 문을 이용하면 된다.
예시. 위에서 생성한 role_1에 고객 테이블에 대한 수정 권한을 추가하고 싶은 경우
# 객체 소유자가 담당 GRANT UPDATE ON 고객 TO role_1;
사용자에게 부여한 역할을 취소하는 작업은 데이터베이스 관리자가 담당하며, 권한 취소와 동일하게 REVOKE 문을 이용한다.
REVOKE 역할이름 FROM 사용자;
역할의 제거는 데이터베이스 관리자가 담당하며 DROP ROLE문을 이용한다.
DROP ROLE 역할이름;
'IT > 데이터베이스' 카테고리의 다른 글
[데이터베이스] 회복과 병행제어 (병행제어) (0) 2022.10.11 [데이터베이스] 회복과 병행제어 (회복 기법) (1) 2022.10.11 [데이터베이스] 회복과 병행 제어 (트랜잭션) (0) 2022.10.11 [데이터베이스] 정규화 (0) 2022.10.11 [데이터베이스] 데이터베이스 설계 (E-R 모델과 릴레이션 변환규칙) (0) 2022.10.11