컴퓨터공학/데이터베이스

[데이터베이스] 무결성, 보안

NIMHO 2022. 11. 25. 20:35
728x90

복습하기 위해 학부 수업 내용을 필기한 내용입니다.
이해를 제대로 하지 못하고 정리한 경우 틀린 내용이 있을 수 있습니다.
그러한 부분에 대해서는 알려주시면 정말 감사하겠습니다.

무결성(integrity)

데이터의 정확성 또는 유효성을 의미한다.

실제로는 무결성 규칙(integrity rule)을 정해 놓는다.

 

무결성 규칙의 종류

  • 도메인 무결성 규칙(domain integrity rules)
    • 주어진 애트리뷰트의 값이 그 애트리뷰트가 정의된 도메인에 속한 값이어야 한다는 것을 규정한다.
  • 릴레이션 무결성 규칙(relation integrity rules)
    • 어느 한 튜플이 릴레이션에 삽입 가능한가, 또는 한 릴레이션과 또 다른 릴레이션의 튜플들 간의 관계가 적절한가

 

SQL에서 무결성 규칙 정의 방법(3가지)

1) 애트리뷰트 제약 조건

[CONSTRAINT constraint] CHECK (cond-exp)

constraint : 제약 조건의 이름

cond-exp : 제약 조건을 표현하는 조건식

ex. 애트리뷰트 봉급은 정수 6000000보다 작아야 한다.

CREATE TABLE 종업원(
	이름 CHAR(10),
	봉급 INTEGER CHECK (봉급 < 6000000)
 );

 

2. 기본 테이블 제약 조건

CREATE TABLE 수강(
	학번		INTEGER NOT NULL,
	과목코드		CHAR(4) NOT NULL,
	성적		INTEGER NOT NULL,
	PRIMARY KEY (학번, 과목코드),
	FOREIGN KEY (학번) REFERENCES 학생
		ON DELETE CASCADE ON UPDATE CASCADE,
	FOREIGN KEY (과목코드) REFERENCES 과목
		ON DELETE CASCADE ON UPDATE CASCADE,
	CHECK (성적 >= 0 AND 성적 <= 100)
);

 

3. 주장(assertion) : 제약 조건을 위반하는 연산이 수행되지 않도록 하는 것

제약 조건 명세 : CREATE ASSERTION 이름 CHECK (조건식)

제약 조건 제기 : DROP ASSERTION 이름;

CREATE ASSERTION MIN_CREDIT
	CHECK((SELECT MIN(과목.학점) FROM 과목) > 0);

CREATE ASSERTION MAX_CREDIT
	CHECK((NOT EXISTS(SELECT * FROM 과목 WHERE NOT (과목.학점 < 5)));
728x90

트리거(Trigger)

테이블에 어떤 일이 일어나면 자동으로 실행된다. (특별한 저장 프로시저)

즉, 테이블에 삽입, 수정, 삭제 등의 작업이 발생할 때 자동으로 작동한다. (한 테이블과 연관)

Stored Procedure와 비슷한 모양을 갖지만, 직접 실행시킬 수는 없고, 해당 테이블에 이벤트가 발생한 경우에만 실행된다.

하나의 트랜잭션(Transaction)이다.

또한, IN, OUT 매개변수를 사용할 수 없다.

ex. 누군가 A라는 테이블의 행을 고의로 삭제한다면? 그때 실행된다.

 

트리거 사용 이점

DB 내 관련 테이블 간의 캐스캐이드(순차적) 변경된다.

CHECK보다 더 복잡한 데이터 무결성을 강화할 수 있다.

사용자 정의 에러 메시지 정의 가능하다.

비 정규화된 DB 환경에서도 사용될 수 있다.

변경 시 데이터의 전후 상태가 비교 가능하다.

 

트리거 사용 시 고려사항

트리거는 실행 후, 제약 조건은 실행 전에 수행된다.

(CHECK는 위배되면 실행되지 않는다.)

테이블은 어떤 동작에 대해 여러 개의 트리거를 가질 수 있다.

테이블 수요자만이 트리거를 생성, 제거할 수 있다.

트리거는 결과 세트를 리턴할 수 없다.

트리거는 다중 행 동작을 처리할 수 있다. (여러 행에 영향을 미친다.)

 

트리거 명세 방법

ex. 조건 만족되면 UPDATE 명령 자동 실행

CREATE TRIGGER STUDENT_INS
	AFTER INSERT ON 학생
BEGIN
	UPDATE 학과테이블 SET 학생수 = 학생수 + 1
		WHERE 학과코드 = NEW_STUDENT.학과코드;
END;

CREATE TRIGGER STUDENT_DEL
	AFTER DELETE ON 학생
BEGIN
	UPDATE 학과테이블 SET 학생수 = 학생수 - 1
		WHERE 학과코드 = OLD_STUDENT.학과코드;
END;

보안

권한이 없는 데이터 액세스, 악의적인 데이터 파과 및 유출로부터 DB를 보호하는 것이다.

DB의 접근 제어는 여러 수준으로 적용된다.

ex. 어떤 사용자는 읽기만 할 수 있고, 어떤 사용자는 테이블을 갱신할 수 있다.

사용자마다 계정비밀번호를 부여하고 DB의 특정 부분에 특정 작업만을 허용한다.

 

DBMS 보안 기능

DB에 대한 접근을 통제할 수 있는 기능이다.

  • 사용자 계정과 암호를 관리한다.
  • 이를 접근 제어(access control)라 한다.

특정 사용자에게 지정된 영역만 접근 통제하는 기능이다.

  • DBMS는 이를 위한 권한 관리 모듈을 가지고 있다.

데이터베이스 관리자(DBA)

  • DB 시스템 전체에 대한 보안을 관리한다.
  • 사용자들에게 새로운 계정과 암호를 만들어 준다.
  • 어떤 사용자에게 권한을 부여/회수하는 일을 한다.
  • 보안 사고 시 DB에 대한 감사를 실시한다.

 

DBMS 보안 기법 (4가지)

1) 권한 부여 테이블 사용

  • 사용자 프로파일(user profile)
    • 사용자가 접근할 수 있도록 권한이 부여된 데이터 객체
    • 이 데이터 객체에 대해 수행시킬 수 있는 연산에 관한 정보
  • 권한 부여 테이블(authorization table)
    • 모든 사용자에 대한 프로파일을 하나의 테이블로 종합 관리
    • T[i, j] : 데이터 객체 j에 대해 사용자 i가 수행할 수 있는 연선 권한

2) 뷰 기법

  • 뷰(view)의 정의 그 자체가 권한 부여 기법이다.
  • 민감한 데이터를 권한이 없는 사용자로부터 은닉한다.
  • 약점 : 갱신이나 삽입, 삭제와 같은 연산에 제약이 있다.

3) GRANT/REVOKE 기법

  • 뷰와는 달리 허용된 데이터에 대해 연산 제한이 가능하다.
  • 특정 데이터와 연산을 특정 사용자만 수행할 수 있게 권한 부여를 명세할 수 있다.
  • 테이블의 생성자
    • 테이블에 대한 모든 권한(테이블 제거 연산 포함) 가진다.
    • 권한 일부를 다른 사용자에게 부여할 수 있다.
  • DBA
    • DBMS에 있는 모든 자원 접근 권한을 가진 사람이다.
    • 생성자나 DBA는 GRANT문을 사용해 권한 일부를 다른 사용자에게 다시 부여할 수 있다.

권한 부여 형식

GRANT 권한_리스트 ON 객체 TO 사용자 [WITH GRANT OPTION]

with grant option : 다른 사용자에게 자기가 부여받은 권한을 또다시 부여

 

권한 회수

REVOKE [GRANT OPTION FOR] 권한_리스트 ON 객체
	FROM 사용자 {CASCADE, RESTRICT};

grant option for : 다른 사용자에게 권한을 부여할 수 있게 한 권한 자체를 취소

cascade : 권한을 준 모두에게서 권한을 회수

restrict : 당사자에게만 권한을 회수

생성자 : 	GRANT SELECT, INSERT ON 학생 TO A;
생성자 :	GRANT SELECT ON 학생 TO B WITH GRANT OPTION;
사용자B :	GRANT SELECT ON 학생 TO C;
생성자 :	REVOKE SELECT ON 학생 FROM B CASCADE;

 

4) 데이터 암호화(data encryption)

  • 허가받지 않은 사람들이 내용을 쉽게 이해할 수 없도록 은폐시키기 위해 데이터를 암호로 바꾸는 것이다.
  • 암호화 시스템(cipher system)
    • 암호화 알고리즘(E : encryption algorithm)
    • 암호화 키(K : encryption key)
    • 해독 알고리즘(D : decryption algorithm)
  • 평문 P(plaintext) : 전송이나 저장해야 될 원시 데이터
  • 암호문 C(ciphertext) : 암호화된 결과

전치 암호화 기법 : 문자들을 일정한 간격으로 나누고, 위치를 변경시키는 것이다.

대체 암호화 기법 : 평문의 문자를 다른 문자 정보로 대체한다.

  • 1단계 : 평문을 암호화 키와 같은 길이의 블록으로 나눈다.
  • 2단계 : 대체할 문자 코드를 b = 00, A = 01, B = 02,..., Z = 26으로 정하고 해당 정수 코드로 대체
  • 3단계 : 암호화 키에 대해서도 2단계 적용
  • 4단계 : 문자 별로 합산(블록 + 암호화 키) 한 후 mod 27을 적용
  • 5단계 : 정수 코드에 해당하는 문자로 바꾸어 암호문을 얻는다.

DES(Data Encryption Standard) 기법 : 대체 암호화 기법과 순열을 사용

공개키 암호화 기법

  • 두 개의 키를 사용한다.
  • 암호화 키와 해독 키

MySQL DBMS의 암호화 기법

    AES(Advance Encryption Standard) 기법을 사용

    테이블 구문과 동일하며, 마지막에 ENCRYPTION = 'Y' 옵션을 추가한다.

CREATE TABLE encryption_test(
	id 	int,
	txt 	varchar(100)
) ENCRYPTION = 'Y';
728x90