Database/Database 기초

보안과 권한 관리

Debin 2021. 11. 15.
반응형

2022. 12. 14. 00:30 수정 및 복습 시작

데이터베이스 보안

  • 데이터베이스 보안의 목표는 조직에서 허가한 사용자만 데이터베이스에 접근할 수 있도록 통제하여 보안을 유지하는 것이다.
  • 물리적 환경에 대한 보안, 권한 관리를 통한 보안, 운영 관리를 통한 보안이 필요하다.
  • 물리적 환경에 대한 보안은 말 그대로 자연재해 같은 데이터베이스에 물리적 손실을 발생시키는 위험으로부터 데이터베이스를 보호하는 것이다. 딱히 중요한 내용은 아니다.
  • 권한 관리를 통한 보안은 접근이 허락된 사용자만 권한 내에서 데이터베이스를 사용하도록 보호한다.
    계정이 발급된 사용자만 데이터베이스에 접근할 수 있도록 통제하고, 사용자별로 사용 범위와 수행 가능한 작업 내용을 제한한다.
  • 운영 관리를 통한 보안은 접근이 허락된 사용자가 권한 내에서 데이터베이스를 사용하는 동안 데이터 무결성을 유지하도록 제약조건을 정의하고 위반하지 않도록 통제한다.

권한 관리

  • 데이터베이스 관리 시스템은 데이터베이스의 보안을 유지하기 위해, 계정이 발급된 사용자가 로그인에 성공했을 경우에만 데이터베이스에 접근이 가능하도록 접근 제어 기능을 기본으로 제공한다.
  • 사용자 계정 관리는 데이터베이스 관리자가 담당한다.
  • 각 사용자는 로그인에 성공했어도 허용된 권한 내에서만 데이터베이스를 사용 가능하다.
  • 보안을 위한 데이터 단위는 데이터베이스 전체부터 특정 테이블의 특정 행과 열 위치에 있는 특정 데이터 값까지 다양하다.
  • 데이터베이스의 모든 객체는 객체를 생성한 사용자만 사용 권한을 가진다.
  • 데이터베이스 객체의 소유자는 필요에 따라 SQL 문을 이용해 다른 사용자에게 사용 권한을 부여하거나 취소할 수 있다.

 

권한 관리는 크게 객체 권한과 역할로 나누어진다.

객체 권한은 권한 부여와 권한 취소가 있으며,

역할은 역할 생성과 역할에 대한 권한 부여 역할 부여 파트로 나뉜다. 

권한의 부여

객체 권한 부여는 GRANT 문을 사용한다.

객체의 소유자가 다른 사용자에게 객체에 대한 사용 권한을 부여하는 것이다.

GRANT 권한 ON 객체 TO 사용자 [WITH GRANT OPTION];
  • 부여 가능한 권한으로는 INSERT, DELETE, UPDATE, SELECT, REFERENCES 등이 있다.
  • 레퍼런스는 외래 키 제약조건을 정의할 수 있는 권한이고 다른 거는 CRUD에 관련된 권한이다.
  • 기본적으로 GRANT 문으로 부여받은 권한은 다른 사용자에게 부여할 수 없다. PUBLIC라는 옵션 키워드도 존재한다.
  • 모든 사용자에게 권한을 똑같이 부여하고 싶다면 특정 사용자를 지정하는 대신 PUBLIC 키워드를 사용한다.
  • WITH GRANT OPTION 키워드를 통해 사용자가 자신이 부여받은 권한을 다른 사용자에게도 부여할 수 있도록 한다.

 

객체 권한 부여 GRANT 문 예시는 아래와 같다.

GRANT SELECT ON 고객 TO HONG; //고객 테이블에 대한 검색 권한을 사용자 HONG 에게 부여
GRANT INSERT, DELETE ON 고객 TO PUBLIC; //고객 테이블에 대한 삽입과 삭제 권한을 모든 사용자에게 부여
GRANT UPDATE(등급, 적립급) ON 고객 TO PARK; //고객 테이블을 구성하는 속성 중 등급과 적립금 속성에 대한 수정 권한을 사용자 PARK에게 부여

 

다음은 시스템 권한  GRANT 문이다.

시스템 권한은 데이터베이스 관리자가 부여한다. 주로 DDL가 관련 있는 권한이다.

시스템 권한을 부여할 때는 객체를 지정할 필요가 없다.

GRANT CRATE TABLE TO SONG; //SONG에게 테이블을 생성할 수 있는 시스템 권한 부여
GRANT CREATE VIEW TO SHIN; //SHIN에게 뷰를 생성할 수 있는 시스템 권한 부여

권한 취소

객체 권한 취소는 REVOKE 문을 사용한다

객체 소유자가 다른 사용자에게 부여한 객체의 사용 권한을 취소한다.

REVOKE 권한 ON 객체 FROM 사용자 CASCADE | RESTRICT;
  • 사용자 A가 사용자 B에게, 사용자 B는 사용자 C에게 같은 권한을 부여한 경우에는
  • CASCADE 옵션은 권한을 취소할 사용자 A가 B뿐만 아니라 C가 부여받은 권한도 연쇄적으로 함께 취소한다.
  • RESTRICT 옵션은 권한을 취소할 사용자가 A가 C가 부여받은 권한은 취소하지 않도록 한다.
REVOKE SELECT ON 고객 FROM CASCADE; //HONG이 고객 테이블에 대한 검색 권한을 부여한 모든 이들과  HONG의 권한도 취소
REVOKE SELECT ON 고객 FROM RESTRICT; //HONG이 고객 테이블에 대한 검색 권한을 부여한 이들의 권한은 취소하지 않고 HONG의 권한만 취소

 

다음은 시스템 권한 취소에 관한 REVOKE 문이다.

데이터베이스 관리자가 다른 사용자에게 부여한 시스템 권한을 취소한다.

특정 객체에 대한 권한 취소가 아니므로 객체를 지정할 필요가 없다.

REVOKE CREATE TABLE FROM KIN; KIN에게 부여한 테이블 생성 권한을 취소

권한 목록은 말그대로 권한 부여에 관한 내용을 기록한 것이다

역할

  • 역할은 여러 권한을 그룹으로 묶어 놓은 것이다.
  • 권한들을 넣은 바구니라고 생각할 수 있겠다. 역할을 이용하면 훨씬 편리하게 작업할 수 있다.
  • 여러 사용자에게 동일한 권한을 부여하고 취소하는 작업을 편리하게 수행하기 때문이다.
  • 사용자에게 부여하고 싶은 여러 권한을 역할에 미리 넣어두고 필요할 때, 역할을 부여하면 여러 권한을 한 번에 부여할 수 있다.
  • 또 권한 관리도 쉬워진다.
  • 새로운 권한의 추가, 기존 권한의 취소 등 역할에 대한 변화가 생기면 해당 역할을 부여받은 모든 사용자에게 변화가 그대로 전달된다.

CREATE ROLE 문을 이용하며 새로운 역할의 생성은 데이터베이스 관리자가 담당한다.

CREATE ROLE 롤이름;

EX
CREATE ROLE ROLE_1;

 

다음은 역할에 권한을 추가하는 GRANT 문이다.

GRANT 권한 ON 객체 TO 롤이름;

EX
GRANT SELECT, INSERT, DELETE ON 고객 TO ROLE_1; //고객테이블에 CRD권한을 ROLE_1 역할에게 준다

 

역할 부여 GRANT 문이다.

GRANT 롤이름 TO 사용자;

GRANT ROLE_1 TO KIM; //KIM에게 방금 만든 ROLE_1의 역할을 부여

 

역할 취소 REVOKE 문이다.

REVOKE 롤이름 FROM 사용자;

EX
REVOKE ROLE_1 FROM KIM; // KIM에게 부여한 ROLE_1 역할을 취소

 

마지막으로 역할 제거 DROP ROLE 문이다.

역할을 제거하면 제거된 역할을 부여받은 모든 사용자에 대해 역할에 속해 있던 권한이 모두 취소된다.

역할 제거는 데이터베이스 관리자가 담당한다.

DROP ROLE 롤이름;

EX
DROP ROLE ROLE_1; //ROLE_1 역할을 제거한다.

 

이상으로 포스팅을 마칩니다. 감사합니다.

 

2022. 12. 14. 01:00 수정 및 복습 마무리

반응형

댓글