이번 포스팅은 데이터 베이스 보호 방법 중 하나인 '접근제어'이다.
1. 접근제어
-접근제어는 크게 사용자 계정 생성, 계정 및 비밀번호 관리, 로그인 세션, 데이터베이스 감사로 구성된다.
1)사용자 계정 생성
-사용자 계정 승인
-로그인 할 때 계정번호와 비밀번호가 유효한지를 검사
2)계정 및 비밀번호 관리
-DBMS에 의해 유지되고 계정 생성, 삭제 시, 레코드가 알맞게 변동되는 암호화된 계정과 비밀번호 파일관리
3)로그인 세션
-사용자가 데이터베이스에 접속한 로그인 세션동안 데이터베이스에서 수행한 모든 연산 기록
4)데이터베이스 감사
-데이터베이스 불법 갱신이 의심될 경우 추적 감사(로그를 이용한 감사) 수행
2. 임의 접근 제어(DAC)
"권한 부여" "권한 취소"
-데이터베이스 시스템에서 임의 접근 제어를 시행하는 전형적인 방법이다. 즉, 누구에게 무엇을 제공할지 안할지 고려하는 것이다.
이 때, 임의 권한을 누구에게 줄 수 있는지 기준이 되는 것은 "권한부여 식별자"이다.
임의 권한은 크게 두가지 수준으로 나뉜다.
1)계정수준
-계정 자체에 특정 권한을 부여한다.
-예를 들어, A라는 계정은 릴레이션을 수정할 수 있도록 권한을 부여하고, B라는 계정은 투플을 삽입할 수 있는 권한을 주는 것이다.
2)릴레이션 수준
-데이터베이스의 릴레이션이나 뷰를 접근하는 권한을 제어한다.
-사용자들에게 명령을 적용할 수 있는 릴레이션을 명시하는 것을 말한다.
-접근 행렬 모델은 사용자를 행에, 객체를 열에 나타내 사용자가 어떤 객체에 어떤 행동을 할 수 있는지 명시할 수 있는 것이다. 예시는 다음 표와 같다.
릴레이션 1 | 뷰 1 | 릴레이션 2의 속성 4 | 릴레이션 4의 투플 1 | |
A | 쓰기 | 쓰기 | 읽기 | 쓰기 |
B | 읽기 | 쓰기 | 읽기 | 갱신 |
C | 갱신 | 갱신 | 쓰기 | 쓰기 |
최근에는 권한 부여 시 고려해야 하는 것이 많아져 계정수준보다 "릴레이션 수준"의 권한 수준에 따라 권한을 관리하는 경우가 많다.
릴레이션에 대한 권한은 "소유자 계정(권한)"으로 할당된다.
소유자 계정(owner account)는
→처음 릴레이션 생성한 계정을 말하며
→소유자 계정은 릴레이션에 대한 모든 권한(권한부여, 취소, 삭제, 갱신,, 등)을 가지고
→소유자 계정은 다른 계정에 권한을 부여하여 릴레이션 관련 권한을 다른 계정에 양도할 수 있다.
개별 릴레이션에 대한 권한의 종류는 다음과 같다.
→SELECT 권한: 검색 권한
→MODIFY 권한: 투플을 변경하는 권한
→REFERENCES 권한: 무결성 제약조건에서 릴레이션 참조하는 권한
→뷰 생성 시 포함된 모든 릴레이션에 대해 SELECT 권한
뷰를 사용한 권한은
→뷰 그 자체만으로도 중요한 임의 권한 관리 방법이다.
→릴레이션의 특정 부분에만 접근할 수 있도록 하는 것이기 때문이다.
앞선 소유자 계정 설명에서
"소유자 계정은 다른 계정에 권한을 부여하여 릴레이션 관련 권한을 다른 계정에 양도할 수 있다."라고 하였다.
이러한 권한 양도(전파) 방법 중 하나는 "GRANT OPTION"이다.
GRANT OPTION은
소유자 계정으로부터 권한을 받은 사용자가 다른 계정 사용자에게 권한을 줄 수 있는 것을 말한다.
따라서, 소유자 계정 사용자는 권한이 어떻게 어디까지 전파되었는지 알 수 없다.
예시를 통해 알아보자.
예시의 가정은
애트리뷰트를 각각 4개 가지는 릴레이션A, 릴레이션B가 있다.
그리고 이 릴레이션의 소유자 계정은 사용자 1이 해당한다.
사용자1이 사용자 2와 사용자 3에게 권한을 전파한다.
사용자 2에게는 두 릴레이션에 대한 수정, 삭제 권한을 부여하였고, 사용자 3에게는 두 릴레이션에 대한 검색 권한을 부여하였다.
하지만, 한 가지 다른 점은 사용자 1이 사용자 3에게 권한을 전파할 때 'GRANT OPTION'을 사용하였다는 것이다.
따라서, 사용자 3은 제3의 계정인 사용자 4에게 릴레이션 A에 대한 검색 권한을 소유자 계정인 사용자 1이 아님에도 권한을 전파할 수 있었다. 사용자 2는 단순히 수정, 삭제 권한만 전파 받아 사용자 4에게 자신이 받은 권한을 전파할 수 없다.
여기서 문제가 되는 것이 있다.
사용자 3이 사용자 1에게 권한 전파 하는 사실을 말하지 않고 독단적으로 권한을 전파한 것이라면 권한 관리라는 보안 부분이 약해져 이슈가 생길 수 있다.
그래서 GRANT OPTION의 경우, 소유자 계정에서 권한 전파 한 것을 취소하면 연결된 권한 전파가 모두 취소되어야 한다.
소유자 계정인 사용자 1이 사용자 3에게 REVORK(권한 취소 명령어)를 사용하면, 자동으로 사용자 4에게 전파된 권한도 취소가 되어야 한다.
이 때, 취소는 전파한 권한 자체, 혹은 부분에 대해서 적용할 수 있다.
사용자 3에게 부여된 권한이 "릴레이션 A,B에 대해 검색권한"일 때, "릴레이션 A"에 대한 권한을 취소할 수 있다. 이 경우, 사용자 4는 자동으로 릴레이션 A에 대한 검색 권한을 잃게 된다.
권한 전파를 제한(취소)하는 방법은 REVORK 뿐만 아니라 "수평 전파"와 수직 전파"도 있다.
수평 전파는 GRANT OPTION을 받을 계정이 권한을 최대 i개 계정에 부여할 수 있다는 것을 말한다. 즉, 몇명이 권한을 전달받았는지를 말한다.
수직 전파는 권한부여의 깊이(몇명의 사용자를 거쳐가는지)를 제한하는 것을 말한다. 이 때, 수직전파가 0이라는 것은 GRANT OPTION 없이 권한을 부여하는 것과 동일히다.
위의 그림에서 사용자 1을 기준으로 했을 때
수평전파는 사용자 2, 사용자 3, 사용자 4, 사용자 5로 총 4가 된다.
GRANT OPTION은 뷰도 적용할 수 있다.
릴레이션 A의 애트리뷰트 'A_A1'과 'A_4'로 만든 뷰 A는 사용자 1이 소유자 계정을 가지고 있다.
이 때, 사용자 1은 사용자 3에게 릴레이션의 방식과 같은 GRANT OPTION을 사용할 수 있다.
권한 전파는 릴레이션의 특정 속성에 대해서도 가능하다.
그림에서 사용자 1이 사용자 4에게 릴레이션 B에 있는 애트리뷰트 A_B3을 갱신할 수 있는 권한을 부여하였다.
3. 강제 접근 제어
강제 접근 제어(MAC)이란
-많은 응용에서 보안 등급을 바탕으로 데이터와 사용자들을 분류하는 부가적인 보안 정책이 필요하여 제안되었다.
-다단계 보안에 대한 요구가 증가하여 강제 접근 제어는 임의 접근 기법과 결합되어 야용될 수 있다.
먼저 강제 접근 제어의 바탕이 되는 보안등급은 일반적으로
1급 비밀 (TS: top secret), 2급 비밀 (S: secret), 3급 비밀 (C: confidntial), 일반 정보(U: Unclassified)로 구분된다.
☞TS(top secret) ≧ S(secret) ≧ C(confidential) ≧ U(unclassified)
강제 접근 제어에는 대표적으로 Bell_LaPadula모델이 있다.
이 모델은 주체(사용자, 계정, 프로그램 등)와 객체(릴레이션, 투플, 속성 등)을 보안등급 중 하나로 분류한다.
보안 등급은 데이터 접근에 대해 다음과 같은 제약조건이 시행되는 기준이 된다.
-단순 보안 특성: 주체 등급≧객체 등급이 아니라면, 주체는 객체에 대한 읽기를 할 수 없다.
☞주체의 보안 등급보다 보안 등급이 높은 객체를 읽을 수 없다는 것이다.
-스타 특성: 주체 등급≦객체 등급이 아니라면, 주체는 객체에 대한 쓰기를 할 수 없다.
☞주체의 보안 등급보다 낮은 보안 등급의 객체에 쓰기를 수행할 수 없다. 만약에 높은 등급의 사용자가 낮은 등급의 투플에 낮은 등급의 사용자가 보면 안되는 내용을 적게 될 경우, 유출되면 안되는 내용이 유출될 수 있기 때문에 제약조건이 생긴 것이다.
Bell-LaPadula의 특성은 관계 데이터베이스에서의 다단계 보안을 가능하게 한다.
즉, 각 애트리뷰트에 대한 등급인 등급 속성과 각 투플들에 대한 등급인 투플 등급(TC)을 가져 보안 등급을 할당받게 된다.
이름 | 연봉 | 능력 | 투플등급 |
김애용 U | 40000 C | 평균 S | S |
박꿀꿀 C | 80000 S | 잘함 C | S |
이때, 투플 등급 속성은 모든 속성등급 값 중에서 가장 높은 값을 취한다.
다단계 릴레이션의 경우 "외관상 키(apparent key)"를 가진다.
외관상 키는 보통의 릴레이션에서 기본키를 구성하는 속성들의 집합이다.
그리고 릴레이션의 투플들은 사용자의 보안등급에 따라 어떤 내용을 보여줄지 결정하게 되는데, 이것을 여과(filtering)이라 한다.
예를들어
이름 | 연봉 | 능력 | 투플등급 |
김애용 U | 40000 C | 평균 S | S |
박꿀꿀 C | 80000 S | 잘함 C | S |
위의 테이블을 보안등급이 C인 사용자에 대해 여과를 진행하면
이름 | 연봉 | 능력 | 투플등급 |
김애용 U | 40000 C | NULL S | S |
박꿀꿀 C | NULL S | 잘함 C | S |
위와 같이 테이블이 수정된다.
만약, 박꿀꿀의 능력의 보안등급이 C보다 높았다면 박꿀꿀의 능력 값도 NULL 처리 되어 능력 애트리뷰트가 삭제되어 되었을 것이다.
다단계 릴레이션도 일반 릴레이션과 같이 무결성 규칙이 있다.
-엔터티 무결성 규칙: 외관상 키는 널값을 가질 수 없으며, 각 투플 내에서 동일한 보안 등급을 가져야 한다. 또한 투플 내에서 외관상 키는 다른 애트리뷰트보다 낮거나 같은 보안 등급을 가져야 한다. 그래서 사용자가 투플의 일부분이라도 볼 수 있으면 키를 볼 수 있다는 것을 보장한다.
-널 무결성과 개체간 무결성: 어떤 보안 등급에 속하는 투플의 값이 이보다 높은 등급의 투플로 여과된다면, 높은 등급의 투플을 다단계 릴레이션에 잘 저장되었다는 것을 의미한다.
다단계 릴레이션의 여과 과정은 갱신 과정에서 악용될 수 있는 정보들이 드러날 수 있다.
이러한 사고를 방지하기 위해 "다개체 생성(polyinstantiation)"을 할 수 있다.
이름 | 연봉 | 능력 | 투플등급 |
김애용 U | 40000 C | NULL C | C |
박꿀꿀 C | NULL C | 잘함 C | C |
앞서 C등급을 기준으로 여과를 한 릴레이션에서 S등급의 투플이 C등급으로 여과되며 값이 NULL로 채워졌다. 이 부분으로 김애용의 능력 등급이 C등급보다 높고, 박꿀꿀의 연봉 등급이 C보다 높다는 것을 추론할 수 있다.
따라서, 외관상 키는 동일하면서 NULL을 대신해 다른 값이 들어가도록 릴레이션을 구성하여 추론을 방지할 수 있다.
피드백은 언제나 환영입니다 :)
'CS? > 데이터베이스보안실습' 카테고리의 다른 글
[복습] 데이터베이스 보안 -1 (0) | 2019.11.19 |
---|---|
[복습] 고급 SQL 프로그래밍 (0) | 2019.11.18 |
[복습]데이터베이스 정규화 -4 (4NF, 5NF) (2) | 2019.11.15 |
[복습]데이터베이스 정규화 -3 (3NF, BCNF) (0) | 2019.11.13 |
[복습]데이터베이스 정규화 -2 (1NF, 2NF) (0) | 2019.11.12 |