Security and Authorization
보안과 권한관리
- 안전한 DB Application을 설계할 때에는 아래와 같은 주요 목표가 있다.
- Secrecy (보안성)
- 허가되지 않은 DB 사용자는 특정 데이터에 접근할 수 없어야 한다.
- Integrity (무결성)
- 허가되지 않은 DB 사용자는 데이터를 변경할 수 없어야 한다.
- Availability (가용성)
- 허가된 DB 사용자는 데이터를 읽거나 수정할 수 있어야 한다.
Access Control (접근 제어)
- DB에 대한 접근은 Security Policy 와 Security Mechanism 으로 구성된다.
Security Policy (보안 정책)
- DB에 대하여 누가 어떠한 권한을 갖는지를 정해놓은 규칙을 의미한다.
Security Mechanism (보안 메커니즘)
- Security Policy를 보장하는 메커니즘을 의미한다.
- DBMS 레벨에서의 주요한 Security Mechanism으로는
DAC(Discretionary Access Control; 자율적 접근 제어) 와
MAC(Mandatory Access Control; 강제적 접근 제어) 이 있다.
DAC (Discretionary Access Control;자율적 접근 제어)
- DB Object(Table, View)에 대한 Access Rights, Privileges 에 기반하는 접근 제어이다.
- Creator는 모든 Access Rights 와 Privileges 를 갖는다.
- DBMS는 어떤 사용자가 어떤 레벨의 Access Control 을 갖는지를 Tracking 한다.
- 접근 허가, 특혜는 SQL DCL의 GRANT Command*을 통해 부여한다.
- SQL-92에서는 사용자에게 권한을 부여할 때, 사용자들마다 Authorization Id를 부여했다.
- SQL-1999에서는 사용자에게 권한을 부여하는 대신, 역할에 권한을 부여하는 형식으로 부여한다.
ex) 사원들마다 권한을 부여하는 것이 아닌, 부서마다 권한을 부여하는 형식이다.
※ DAC는 완전한 보안을 제공하지 않는다.
(Troy Horse Issue 가 존재한다.)
GRANT Command
GRANT <privileges> ON <obejct> TO <users> [WITH GRANT OPTION]
1) <privileges>
- 위 SQL에서 <privileges> 에는 아래와 같은 SQL Command들이 위치할 수 있다.
a) SELECT
- 해당 \(\texttt{users}\)에게 \(\texttt{object}\)의 모든 Field들에 접근(읽기)할 수 있는 권한을 부여한다.
- 추후에 \(\texttt{ALTER TABLE}\) Command를 통해 추가된 Field들에도 접근할 수 있다.
b) \(\texttt{INSERT(column_name)}\)
- 해당 \(\texttt{users}\)에게 \(\texttt{object}\)의 지정된 Column(\(\texttt{column_name}\))에 값을 가진 Tuple을 삽입할 수 있는 권한을 부여한다.
- \(\texttt{column_name}\)을 생략할 경우, 해당 \(\texttt{users}\)에게 모든 Field에 대해 \(\texttt{INSERT}\) 권한을 부여하게 된다.
c) \(\texttt{DELETE}\)
- 해당 \(\texttt{users}\)에게 \(\texttt{object}\)의 Tuple을 삭제할 수 있는 권한을 부여한다.
d) \(\texttt{REFERENCES(column_name)}\)
- 해당 \(\texttt{users}\)에게 \(\texttt{object}\)의 Column(\(\texttt{column_name}\))을 참조하는 Foreign Key를 정의할 수 있는 권한을 부여한다.
- \(\texttt{column_name}\)을 생략할 경우, 해당 \(\texttt{users}\)에게 모든 Column에 대해 \(\texttt{REFERENCES}\) 권한을 부여하게 된다.
2) \(\texttt{object}\)
- Table 혹은 View를 의미한다.
3) \(\texttt{users}\)
- \(\texttt{privileges}\)를 부여할 사용자명을 의미한다.
4) \(\texttt{WITH GRANT OPTION}\)
- 어떤 \(\texttt{users}\)가 \(\texttt{object}\)에 대해 \(\texttt{privileges}\)를 갖고 있을 때,
\(\texttt{users}\)가 다른 사용자에게 \(\texttt{GRANT}\) Command를 통해 \(\texttt{privileges}\) 권한을 부여할 수 있게 한다.
※ SQL DDL(\(\texttt{CREATE, ALTER, DROP}\))은 해당 \(\texttt{object}\)의 Owner만 수행할 수 있다.
Example. \(\texttt{GRANT}\) Command
GRANT INSERT, SELECT ON Sailors TO Horatio
-- Horatio에게 Sailors 테이블에 대해 INSERT, SELECT 권한을 부여한다.
GRANT DELETE ON Sailors TO Yuppy WITH GRANT OPTION
- Yuppy에게 Sailors 테이블에 대해 DELETE 권한을 부여한다.
-- Grant Option에 의해, Yuppy는 DELETE 권한을 다른 사용자에게 부여할 수 있다.
GRANT UPDATE (rating) ON Sailors TO Dustin
- Dustin에게 Sailors 테이블의 rating Column만 UPDATE할 수 있는 권한을 부여한다.
GRANT SELECT ON ActiveSailors TO Guppy, Yuppy
-- Guppy, Yuppy에게 ActiveSailors View에 대해 SELECT 권한을 부여한다.
-- 본래, View는 읽기만 가능한 가상 테이블임을 상기하자.
\(\texttt{REVOKE}\) Command
- \(\texttt{GRANT}\)와 반대로, 권한을 박탈하는 Command이다.
- 어떤 사용자 A에게 \(\texttt{REVOKE}\) Command를 수행하면,
\(\texttt{WITH GRANT OPTION}\)을 통해 A에게 권한을 부여받은 다른 사용자 B, C, D까지 모두 권한이 박탈된다.
- 특히, View의 Owner가 해당 View에 대한 SELECT 권한을 박탈당하면, 해당 View는 Drop된다.
(View는 읽기 전용 가상 테이블이기 때문이다. View는 읽지 못하면 존재할 이유가 없다.)
View and Security
- View는 어떤 Relation들의 특정 Column들만 Projection하여 구성된 가상테이블이기 때문에,
보안에 민감한 데이터는 사용자에게 보여지지 않도록 구성할 수 있다.
- 또한 View에 있는 Tuple들은 실제로 Disk에 저장되지 않는다. 이미 저장되어 있는 데이터들이기 때문이다.
- 위와 같은 특징들로 인해, View는 보안에 강한 테이블이라 볼 수 있다.
MAC (Mandatory Access Control; 강제적 접근 제어)
- 기밀을 취급하는 Application의 경우, 보다 높은 레벨의 보안을 유지하기 위해 Mandatory Access Control을 시행한다.
- Mandatory Access Control에서는 DB Object, User, User Program은 각자의 Security Class*를 갖고 DB에 접근하게 된다.
* Security Class
Top Secret(TS) > Secret(S) > Confidential(C) > Unclassified(U)
* Terms
DB Obejcts = {Tables, Views, Tuples}
Subjects = {Users, User Programs}
Bell-LaPadula Model
1) Simple Security Property
Subject S가 DB Obejct O를 읽기 위해서는
Security Class(S) \(\geq\) Security Class(O) 이어야한다.
2) * Property
Subject S가 DB Object O에 데이터를 쓰기 위해서는
Security Class(S) \(\leq\) Security Class(O) 이어야한다.
- 보안 등급이 낮은 사용자가 쓰는 데이터는 DB의 어느곳에 쓰여도 영향력이 적지만,
보안 등급이 높은 사용자가 쓰는 데이터는 DB의 아무곳에나 쓰이면 안된다는 점을 표현한 Property이다.
- 즉, 보안 등급이 높은 데이터가 보안 등급이 낮은 Object로 흐르는 것을 방지하기 위한 Property이다.
Internet-Oriented Security
- Internet환경에서는 User Authentication과 Trust가 Key Issue이다.
- 특히, Trust Issue는 External Network에 Access할 때 충족되기 어려운 Issue 중 하나이다.
- EncryptionTechnique는 이러한 Issue들을 해결하는 수단 중 하나이다.
Encryption
- Data를 Masking하는 방법 중 하나이다.
- \(\texttt{Encrypt(data, encryption_key) = encrypted_data}\)
- \(\texttt{Decrypt(encrypted_data, decryption_key) = original_data}\)
1) Symmetric Encryption
- Encryption과 Decryption에 같은 Key를 사용하는 방법이다.
- 보안에 취약하다.
- DES Algorithm (56bits key)
- AES Algorithm (128bits key or Optionally, 192bits or 256bits)
2) Public-Key Encryption
- 모두가 알 수 있는 Public Encryption Key로 Encryption하고,
해당 사용자만 알 수 있는 Decryption Key를 통해 Decryption하는 방법이다.
- RSA Algorithm*
* RSA Algorithm
- Integer Data I을 RSA 방법으로 Encryption한다.
- Encryption할 어떤 Data보다도 큰 L은 L = p * q 형태이고,
p와 q는 1,024bits()이고 서로 구분되는 Prime Number이다.
- 이 때, Encryption Key로 활용될, Random Number e는 1 < e < L 의 범위를 가지며,
(p - 1) * (q - 1)과 Relatively Prime 관계이다.
- Encryption Function: \(S = I^e \; \mathrm{mod} \; L\)
(S는 Encrypted Data이다.)
- Decryption Function: \(I = S^d \; \mathrm{mod} \; L\)
(I는 Original Data, d는 Decryption Key이다.)
Reference: Database Management Systems 3E (Raghu Ramakrishnan, Johannes Gehrke 저, McGrawHill, 2003)