개발스토리
권한 관리 본문
데이터베이스 보안의 목표
조직에서 허가한 사용자만 데이터베이스에 접근할 수 있도록 통제하여 보안을 유지하는 것
데이터베이스 보안
■ 물리적 환경에 대한 보안
- 자연 재해처럼 데이터베이스에 물리적 손실을 발생시키는 위험으로부터 데이터베이스를 보호
■ 권한 관리를 통한 보안
- 접근이 허락된 사용자만 권한 내에서 데이터베이스를 사용하도록 보호
- 계정이 발급된 사용자만 데이터베이스에 접근할 수 있도록 통제하고, 사용자 별로 사용 범위와 수행 가능한 작업 내용을 제한
■ 운영 관리를 통한 보안
- 접근이 허락된 사용자가 권한 내에서 데이터베이스를 사용하는 동안 데이터 무결성을 유지하도록 제약 조건을 정의하고 위반하지 않도록 통제
권한 관리의 개념
■ 접근 제어(Access Control)
- 계정이 발급된 사용자가 로그인에 성공했을 경우에만 데이터베이스에 접근을 허용
- 사용자 계정 관리는 데이터베이스 관리자가 담당
■ 각 사용자는 허용된 권한 내에서만 데이터베이스를 사용
- 로그인에 성공한 사용자도 데이터베이스 사용 범위와 수행 가능한 작업이 제한된다.
■ 데이터베이스의 모든 객체는 생성한 사용자만 사용 권한을 가진다.
- 데이터베이스 객체의 소유자는 필요에 따라 SQL문을 이용해 다른 사용자에게 사용 권한을 부여하거나 취소할 수 있다.
■ 객체 권한 부여 : GRANT
- 객체의 소유자가 다른 사용자에게 객체에 대한 사용 권한을 부여
GRANT 권한 ON 객체 TO 사용자 [WITH GRANT OPTION];
- 부여 가능한 주요 권한 : INSERT, DELETE, UPDATE, SELECT, REFERENCES
- 여러 권한을 한 번에 부여하는 것도 가능하다.
- 기본적으로 GRANT 문으로 부여받은 권한은 다른 사용자에게 부여할 수 없다.
- PUBLIC : 모든 사용자에게 권한을 똑같이 부여하고 싶다면 특정 사용자를 지정하는 대신 PUBLIC 키워드를 이용한다.
- WITH GRANT OPTION : 사용자가 자신이 부여받은 권한을 다른 사용자에게도 부여할 수 있도록 한다.
예시를 살펴볼까요~~?!?!
Q 고객 테이블에 대한 검색 권한을 사용자 Hong에게 부여해보자.
> GRANT SELECT ON 고객 TO Hong;
Q 고객 테이블에 대한 삽입과 삭제 권한을 모든 사용자에게 부여해보자.
> GRANT INSERT, DELETE ON 고객 TO PUBLIC;
Q 고객 테이블을 구성하는 속성 중 등급과 적립금 속성에 대한 수정 권한을 사용자 JOO에게 부여해보자
> GRANT UPDATE(등급, 적립금) ON 고객 TO JOO;
Q 고객 테이블에 대한 검색 권한을 WITH GRANT OPTION을 포함하여 사용자 JOO에게 부여해보자
> GRANT SELECT ON 고객 TO JOO WITH GRANT OPTION;
■ 시스템 권한 부여 : GRANT
- 시스템 권한은 데이터베이스 관리자가 부여한다.
시스템 권한 : 데이터베이스 관리와 관련된 작업에 대한 권한 : DDL과 관련된 권한들
- 시스템 권한을 부여할 때는 객체를 지정할 필요가 없다.
Q 테이블을 생성할 수 있는 시스템 권한을 사용자 JOO에게 부여해보자
> GRANT CREATE TABLE TO JOO;
Q 뷰를 생성할 수 있는 시스템 권한을 사용자 JOO에게 부여해보자
> GRANT CREATE VIEW TO JOO;
■ 객체 권한 취소 : REVOKE
- 객체 소유자가 다른 사용자에게 부여한 객체의 사용 권한을 취소
REVOKE 권한 ON 객체 FROM 사용자 CASCADE | RESTRICT;
만약, 사용자 KIM이 HONG에게 부여한 고객 테이블에 대한 검색 권한을 취소한다면 PARM에게 부여된 검색 권한은 어떻게 처리 될까?
>> CASCADE 또는 RESTRICT 옵션으로 선택이 가능하다.
KIM이 HONG에게 부여한 고객 테이블에 대한 검색 권한을 취소하면서 HONG이 다른 사용자에게 부여한
고객 테이블에 대한 검색 권한도 함께 취소
> REVOKE SELECT ON 고객 FROM HONG CASCADE;
HONG이 다른 사용자에게 권한을 부여한 적이 없는 경우에만 KIM이 HONG에게 부여한 고객 테이블에 대한
검색 권한을 취소
> REVOKE SELECT ON 고객 FROM HONG RESTRICT;
■ 시스템 권한 취소 : REVOKE
- 데이터베이스 관리자가 다른 사용자에게 부여한 시스템 권한을 취소
- 특정 객체에 대한 권한 취소가 아니므로 객체를 지정할 필요가 없다.
JOO에게 부여한 테이블 생성 권한 취소
> REVOKE CREATE TABLE FROM JOO;
■ 권한 목록
- 권한 부여에 관한 내용을 기록
- 사용자들에게 어떤 권한을 부여했는지, WITH GRANT OPTION을 포함하여 권한을 부여했는지 등
여기서 만약 KIM이 권한을 JOO, PARK, HONG에게 모두 부여하려면 작업이 번거로워진다. 그래서 역할의 개념을 알아야 한다!
역할
여러 권한을 그룹으로 묶어놓은 것
■ 역할의 필요성
- 여러 사용자에게 동일한 권한들을 부여하고 취소하는 작업을 편리하게 수행할 수 있도록 한다.
- 사용자에게 부여하고 싶은 여러 권한을 미리 넣어두고 필요할 때 역할을 부여하면 여러 권한을 한 번에 부여 가능
- 사용자에게 부여한 역할을 취소하면 한 번에 여러 권한을 취소할 수 있다.
- 권한 관리가 쉬워진다.
- 새로운 권한의 추가, 기존 권한의 취소 등 역할에 변화가 생기면 해당 역할을 부여받은 모든 사용자에게 변화가 그대로 전달된다.
■ 역할 생성 : CREATE ROLE
role이라는 이름의 역할 생성
> CREATE ROLE role;
■ 역할에 권한 추가 : GRANT
형식 : GRANT 권한 ON 객체 TO 롤이름;
고객 테이블에 대한 검색/삽입/삭제 권한을 role 역할에 넣어보자
> GRANT SELECT, INSERT, DELETE ON 고객 role;
- 객체와 관련된 권한을 역할에 추가하는 작업은 객체의 소유자가 담당한다.
■ 역할 부여 : GRANT
형식 : GRANT 롤이름 TO 사용자;
고객 테이블에 대한 검색/삽입/삭제 권한을 포함하고 있는 role 역할을 사용자 JOO에게 부여해보자
> GRANT role TO JOO;
- 역할을 사용자에게 부여하는 것은 데이터베이스 관리자가 담당한다.
- 위 그림처럼 역할을 이용하면 권한을 쉽게 부여할 수 있고 새로운 권한의 추가도 간편하게 수행된다.
■ 역할 취소 : REVOKE
형식 : REVOKE 롤이름 FROM 사용자;
사용자 JOO에게 부여한 role 역할을 취소해보자
> REVOKE role FROM JOO;
- 사용자에게 부여한 역할의 취소는 데이터베이스 관리자가 담당한다.
■ 역할 제거 : DROP ROLE
형식 : DROP ROLE 롤이름;
생성한 role 역할을 제거해보자
> DROP ROLE role;
- 역할을 제거하면 제거된 역할을 부여받은 모든 사용자에 대해 역할에 속해 있던 권한이 모두 취소된다.
- 역할 제거는 데이터베이스 관리자가 담당한다.
'Computer Science > 데이터베이스' 카테고리의 다른 글
Database Connection Pool (1) | 2021.08.30 |
---|---|
회복과 병행제어4 (0) | 2021.06.06 |
회복과 병행제어3 (0) | 2021.05.25 |
회복과 병행제어2 (1) | 2021.05.25 |
회복과 병행 제어 (0) | 2021.05.24 |