무결성(Integrity)
- 데이터가 정확하고(correct) 모순이 없이 일관성 있는(consistent) 상태
- 예) 학생의 학년(year) 값은 1, 2, 3, 4 중의 하나여야 함
- 무결성 규정 시 구성 요소
- 규정 이름
- 검사 시기
- 제약 조건
- 위반 조치
무결성의 종류
- 도메인 무결성(domain integrity): 속성의 값은 그것의 도메인(타입)에 해당되는 값이어야 함
- 릴레이션 무결성
- 개체 무결성(entity integrity): 기본키는 널이 될 수 없음
- 참조 무결성(referential integrity): 외래키 제약 조건
- 사용자 정의 무결성(user defined integrity)
무결성의 구분
- 상태(state) 제약 vs. 과도(transition) 제약
- 상태 제약: 데이터 값이 만족해야 할 조건
- 과도 제약: 데이터 값의 변화가 만족해야 할 조건
- 예) '월급(salary)'은 줄어들 수 없다.
- 집합(set) 제약 vs. 투플(tuple) 제약
- 투플 제약은 개개의 투플 수준에서의 조건, 집합 제약은 투플들의 집합에 대한 조건
- 즉시(immediate) 제약 vs. 지연(deferred) 제약
- 데이터에 대한 갱신이 수행되는 즉시 적용되는 조건
- 갱신을 수행하는 트랜잭션이 종료되는(commit) 시점에서 적용되는 조건
무결성의 명세 방법
- SQL의 무결성 규정을 사용
- 도메인 제약조건을 이용
- 테이블 제약조건을 이용
- assertion 문을 이용
- 트리거(trigger)를 사용
도메인 제약 조건의 사용
[CONSTRAINT 제약조건명] CHECK (조건식)
- 예
CREATE dyear SMALLINT
CONSTRAINT CONST-YEAR
CHECK (VALUE IN (1,2,3,4))
테이블 제약 조건의 예
CREATE TABLE enrol
( sno DSNO NOT NULL,
cno DCNO NOT NULL,
grade INTEGER NOT NULL,
PRIMARY KEY (sno, cno),
FOREIGN KEY (sno) REFERENCES student
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY (cno) REFERENCES course
ON DELETE CASCADE
ON UPDATE CASCADE,
CHECK (grade >= 0 AND grade <= 100)
)
ASSERTION을 사용
- 특정 테이블과 관계 없이 제약 조건을 명시할 수 있음
- 구문
CREATE ASSERTION 제약조건이름 CHECK (조건식) - 예
CREATE ASSERTION CONST_YEAR
CHECK ((SELECT MIN(student.year)
FROM STUDENT) > 0);
CREATE ASSERTION CONST_CREDIT
CHECK (NOT EXIST (SELECT * FROM course
WHERE NOT (course.credit < 5)));
트리거를 이용한 무결성의 명세
- 형식
DEFINE TRIGGER 트리거_이름 ON 트리거_조건 : 명령문 - 예
DEFINE TRIGGER student_insert_trg
ON INSERTION OF student:
( UPDATE department
SET totalstudent = totalstudent + 1
WHERE dept = NEW_STUDENT.dno )
DEFINE TRIGGER student_del_trg
ON INSERTION OF student:
( UPDATE department
SET totalstudent = totalstudent - 1
WHERE dept = OLD_STUDENT.dno )
데이터베이스 보안(Security)
- 불법적인 데이터의 유출, 변경, 파괴로부터 데이터베이스를 보호
데이터베이스 접근 제어
강의 자료 참고
- 1단계: 신분 인증(authentication)
- 2단계: 권한 검사(authorization check)
보안 서브시스템
- 권한 관리 기능
- 권한 검사 기능
- 단순 거부, 터미널 폐쇄, 프로그램 중단
권한 부여 테이블
강의 자료 참고
데이터 객체의 종류
- 객체(이름)
- 테이블, 컬럼, 뷰 등의 데이터 객체의 이름
- 데이터 값
- 대상 데이터 객체에 대한 조건으로 명세
예) 고객 등급이 '일반'인 데이터에 대해서만 검색 가능
- 대상 데이터 객체에 대한 조건으로 명세
- 통계적 명세
- 데이터 객체에 대한 집계 연산(avg, sum, max, ...)을 포함
- 프로그램
- 권한부여 테이블
사용자 연산의 구분
- 검색: 단독, 통계, 조건절
- 갱신: 추가, 삭제, 변경
- 정의: 테이블, 인덱스 등의 추가 및 삭제
권한 부여 방법
- 뷰(view) 사용
- 권한 관련 SQL 명령 사용
- GRANT
- REVOKE
- 암호 사용
- 데이터베이스, 테이블, 컬럼, 레코드 등의 단위로 암호화
뷰를 사용한 접근 제어
- 뷰를 사용하여 데이터를 선별적으로 공개할 수 있음
예) 아래와 같이 IT_STUDENT 뷰를 만들어서 IT학과 사람들은 IT_STUDENT만 보게 하고 STUDENT 테이블은 접근할 수 없게 함
create view IT_STUDENT as
select *
from STUDENT
where dept = 'IT'
GRANT/REVOKE 문
- 접근 권한을 부여
GRANT 권한 ON 데이터객체 TO 사용자 [WITH GRANT OPTION]
WITH GRANT OPTION: 부여 받은 권한을 다시 다른 사용자에게 부여할 수 있는 권한 부여 - 접근 권한을 철회
REVOKE 권한 [GRANT OPTION FOR] ON 데이터객체
FROM 사용자 { CASCADE, RESTRICTED }
GRANT OPTION FOR: 앞서 WITH GRANT OPTION과 함께 권한을 부여했을 때, 다른 사용자에게 권한을 부여할 수 있는 권한을 철회
CASCADE: 다른 사용자에게 부여한 권한까지 철회
GRANT/REVOKE 예
강의 자료 참고
'데이터베이스 Database' 카테고리의 다른 글
Chapter 14 회복과 병행 제어 (0) | 2020.12.14 |
---|---|
Chapter 10 데이터베이스 저장구조 (0) | 2020.12.06 |
Chapter 9 데이터베이스 설계 (0) | 2020.12.05 |
Chapter 8 ER 모델 ✍ (0) | 2020.11.16 |
Chapter 7 데이터 종속성과 정규화 ✍ (0) | 2020.11.16 |