티스토리 뷰
보안
데이터베이스의 보안을 유지하여 데이터를 보호하는 방법은 고려하는 측면에 따라 다양하게 구분할 수 있지만, 일반적으로 다음 세 가지 유형으로 구분한다.
1. 물리적 환경에 대한 보안 : 자연 재해 등으로부터 보호
2. 권한 관리를 통한 보안 : 권한이 없는 사용자로부터 보호
3. 운영 관리를 통한 보안 : 권한이 있는 사용자로부터 보호
권한 관리
권한 관리의 개념
데이터베이스 관리 시스템은 데이터베이스의 보안을 유지하기 위해, 계정이 발급된 사용자가 로그인에 성공했을 경우에만 데이터베이스에 접근이 가능하도록 하는 접근 제어 기능을 기본으로 제공한다. 그러므로 모든 사용자는 자신에게 발급된 계정으로 로그인해야 데이터베이스에 접근할 수 있다.
로그인을 통해 데이터베이스에 접근할 수 있더라도 데이터베이스 안에 있는 모든 데이터를 사용할 수 있는 것은 아니다. 각 사용자는 자신에게 허용된 권한 내에서만 데이터베이스를 사용할 수 있다.
데이터베이스 객체의 소유자는 필요에 따라 다른 사용자에게 자신이 소유한 객체에 대한 사용 권한을 부여할 수 있다. SQL 문을 이용해 다른 사용자에게 자신이 생성한 객체에 대한 적절한 수준의 사용 권한을 부여하거나 취소하면 된다.
권한의 부여
객체의 소유자가 다른 사용자에게 객체에 대한 사용 권한을 부여하기 위해 필요한 SQL 명령어는 GRANT이다.
GRANT 권한 ON 객체 TO 사용자 [WITH GRANT OPTION];
테이블과 관련하여 다른 사용자에게 부여할 수 있는 주요 권한으로는 INSERT, DELETE, UPDATE, SELECT, REFERENCES가 있는데, 여러 권한을 한 번에 동시에 부여할 수도 있다. REFERENCES는 외래키 제약조건을 정의할 수 있는 권한이다. UPDATE와 SELECT는 테이블을 구성하는 속성들 중 일부 속성만 수정 또는 검색하는 권한을 부여할 수도 있다. GRANT는 기본적으로 테이블을 구성하는 모든 속성에 권한을 부여하지만, UPDATE와 SELECT는 테이블을 구성하는 속성들 중 일부 속성만 수정 또는 검색하는 권한을 부여할 수도 있다. 일부 속성만 권한을 부여하려면 권한과 함께 권한을 부여하고 싶은 속성의 이름을 ()안에 나열하면 된다. 모든 사용자에게 권한을 똑같이 부여하고 싶다면 특정 사용자를 지정하는 대신 PUBLIC 키워드를 이용하여 GRANT 문을 작성한다.
GRANT 명령어로 부여받은 권한은 기본적으로 다른 사용자에게 부여할 수 없다. 하지만 WITH GRANT OPTION을 포함하면 권한을 부여받은 사용자가 자신을 부여받은 권한을 다른 사용자에게도 부여할 수 있다.
ex) 고객 테이블에 대한 검색 권한을 사용자 Hong에게 부여
GRANT SELECT ON 고객 TO Hong;
ex) 고객 테이블에 대한 삽입과 삭제 권한을 모든 사용자에게 부여해보자
GRANT INSERT, DELLETE ON 고객 TO PUBLIC;
ex) 고객 테이블을 구성하는 속성 중 등급과 적립금 속성에 대한 수정 권한을 사용자 Park에게 부여해보자
GRANT UPDATE(등급, 적립금) ON 고객 TO Park;
ex) 고객 테이블에 대한 검색 권한을 WITH GRANT OPTION을 포함하여 사용자 Lee에게 부여해보자
GRANT SELECT ON 고객 TO Lee WITH GRANT OPTION;
보안을 강화하기 위해 뷰를 이용할 수도 있다. 객체에 대한 권한은 해당 객체의 소유자가 부여하지만 시스템 권한은 데이터베이스 관리자가 부여할 수 있다. 시스템 권한은 특정 객체에 대한 작업이 아닌, 데이터베이스 관리와 관련된 작업에 대한 권한이다. CREATE TABLE, CREATE VIEW 같은 데이터정의어DDL이 시스템 권한에 속한다. 단, 특정 객체에 대한 권한을 부여하는 것이 아니므로 시스템 권한을 부여할 때는 객체를 지정할 필요가 없다.
ex) 테이블을 생성할 수 있는 시스템 권한을 사용자 Song에게 부여해보자
GRANT CREATE TABLE TO Song;
ex) 뷰를 생성할 수 있는 시스템 권한을 사용자 Shin에게 부여하자
GRANT CREATE VIEW TO Shine;
권한의 취소
다른 사용자에게 부여한 객체의 사용 권한을 취소하기 위해 필요한 SQL 명령어는 REVOKE이다.
REVOKE 권한 ON 객체 FROM 사용자 CASCADE : RESTRICT;
앞서 WITH GRANT OPTION을 포함하여 grant 문을 수행하면 권한을 부여받은 사용자가 자신이 부여받은 권한을 사용자에게도 부여할 수 있었다. 이 경우 사용자의 권한이 취소되었을 때, 권한이 취소된 사용자가 다른 사용자에게 부여한 권한을 처리하는 방법이 중요하다. 연쇄적으로 취소하고자 한다면 CASCADE, 취소하지 않을려면 RESTRICT 지정
ex) 그림과 같이 권한이 부여된 상황에서, Kim이 Hong에게 부여한 고객 테이블에 대한 검색 권한을 취소하면서 Hong이 다른 사용자에게 부여한 고객 테이블에 대한 검색 권한도 함께 취소하도록 해보자
REVOKE SELECT ON 고객 FROM Hong CASCADE;
ex) 그림과 같이 권한이 부여된 상황에서, Hong이 다른 사용자에게 권한을 부여한 적이 없는 경우에만 Kim이 Hong에게 부여한 고객 테이블에 대한 검색 권한을 취소하는 명령문을 작성해보자.
REVOKE SELECT ON 고객 FROM Hong RESTRICT;
ex) Hong에게 부여한 테이블 생성 권한을 취소해보자
REVOKE CREATE TABLE FROM Hong;
역할의 부여와 취소
여러 사용자에게 동일한 권한들을 붕하고 취소하는 번거로운 작업을 편리하게 수행할 수 있도록 도움을 주는 것이 역할role이다. 역할은 여러 권한을 그룹으로 묶어놓은 것으로, 권한들을 넣어둔 바구니로 이해하면 쉽다.
새로운 역할을 생성하는 기능은 데이터베이스 관리자가 담당한다. 역할을 생성하는 데 필요한 SQL 명령어는 CREATE ROLE이다.
CREATE ROLE 롤이름;
ex) role_1이라는 이름의 역할을 생성해보자.
CREATE ROLE role_1;
역할에 필요한 권한들을 넣을 때는 GRANT 명령어를 이용한다. 역할에 객체와 관련된 권한을 넣는 작업은 객체의 소유주가 담당한다. 역할에 권한을 넣는 GRANT 문의 기본 형식은 다음과 같다.
GRANT 권한 ON 객체 TO 롤이름;
ex) 고객 테이블에 대한 검색 삽입 삭제 권한을 위에서 생성한 role_1 역할을 넣어보자.
GRANT SELECT, INSERT, DELETE ON 고객 TO role_1;
역할을 사용자에게 부여하는 것은 데이터베이스 관리자가 담당하며 GRANT 문을 이용한다.
GRANT 롤이름 TO 사용자;
ex) 고객 테이블에 대한 검색 삽입 삭제 권한을 포함하고 있는 role_1 역할을 사용자 Hong에게 부여해보자.
GRANT role_1 TO Hong;
역할을 이용해 3개의 권한을 세 명의 사용자에게 부여한다면
GRANT role_1 TO Hong;
GRANT role_1 TO Park;
GRANT role_1 TO Lee;
만약 세 명의 사용자에게 UPDATE 권한을 추가하고 싶다면 GRANT UPDATE ON 고객 TO role_1;만 하면 된다.
사용자에게 부여한 역할을 취소하는 작업은 데이터베이스 관리자가 담당하며, 권한 취소처럼 REVOKE 문을 이용한다.
REVOKE 롤이름 FROM 사용자;
ex) 사용자 Hong에게 부여한 role_1 역할을 취소해보자.
REVOKE role_1 FROM Hong;
역할을 제거하면 제거된 역할을 부여받은 모든 사용자도 역할에 속해 있던 권한을 더는 가지지 못하게 된다.
역할 제거는 데이터베이스 관리자가 담당하며 DROP ROLE 문을 이용한다.
DROP ROLE 롤이름;
ex) 예제에서 생성한 role_1 역학을 제거해보자
DROP ROLE role_1;
'책 > 데이터베이스개론' 카테고리의 다른 글
13. 데이터 과학과 빅데이터 (0) | 2020.12.12 |
---|---|
12. 데이터베이스 응용 기술 (0) | 2020.12.11 |
10. 회복과 병행 제어 (0) | 2020.12.07 |
9. 정규화 (0) | 2020.12.07 |
8. 데이터베이스 설계 (5) | 2020.12.06 |