데이터 베이스
특정 조직의 업무를 수행하는데 필요한 상호 관련된 데이터들의 모임
데이터 베이스의 정의 4가지
통합 데이터(Intergrated Data) : 검색의 효율성을 위해 중복이 최소화된 데이터의 모임
저장 데이터(Stored Data) : 컴퓨터가 접근 가능한 저장 매체에 저장된 데이터
운영 데이터(Operational Data) : 조직의 목적을 위해 존재 가치가 확실하고 반드시 필요한 데이터
공유 데이터(Shared Data) : 여러 응용 프로그램들이 공동으로 사용하는 데이터
데이터 베이스의 특징
실시간 접근성 : 사용자의 질의에 대하여 즉시 처리하여 응답하는 특징
계속적인 진화 : 삽입, 삭제, 갱신을 통하여 항상 최근의 정확한 데이터를 동적으로 유지
동시 공유 : 여러 사용자가 동시에 원하는 데이터를 공용
내용에 의한 참조 : DB의 데이터를 참조할 때 튜플의 주소나 위치에 의해서가 아니라 사용자가 요구하는 데이터 내용에 따라 참조하는 특징
논리적 독립성 : 응용프로그램과 DB를 독립, 데이터의 논리적 구조를 변경시키더라도 응용프로그램은 변경되지 않는다.
물리적 독립성 : 응용프로그램과 보조기억장치와 같은 물리적 장치를 독립, DB관리 시스템의 성능향상을 위해 새로운 디스크를 도입하더라도 응용프로그램에 영향을 주지않고 데이터의 물리적 구조만 변경될 수 있다.
데이터 설계자
기업의 업무 수행에 필요한 데이터 구조를 체계적으로 정의하는 사람
데이터 관리자
하나의 기업 또는 조직 내에서 데이터에 대한 정의, 체계화, 감독 및 보안 업무를 담당하는 관리자
데이터베이스 관리자(DBA)
개념 스키마와 물리적 스키마 설계, 보안과 권한 부여, 데이터 가용성과 장애복구의 역할을 맡는 관리자
데이터베이스 설계
데이터베이스 설계란 데이터베이스의 구조(Schema)를 개발하는 과정이다.
요구 조건 분석
개념적 설계
논리적 설계
물리적 설계
데이터 베이스 구현
ER 모델
1:1 관계 : 관계에 참여하고 있는 두 개체 타입이 모두 하나씩의 개체 어커런스를 갖는 관계
* 어커런스 : '과목'이라는 개체 타입에 대해 '과목코드', '과목이름' 개체 어커런스가 존재할 수 있다.
1:N 관계(일대다) : 한 개체 타입은 하나의 개체 어커런스를, 다른 한 개체 타입은 여러개의 개체 어커런스를 갖는 관계
N:M관계(다대다) : 두 개체 타입 모두 여러개의 개체 어커런스를 가질 수 있는 관계
관계대수
관계해석 : 원하는 정보가 무엇이라는 것만 계산수식을 사용해 정의, 비절차적, 어떻게 얻어야 하는지는 표현하지 않음
관계대수 : 원하는 정보와 그 정보를 검색하기 위해서 어떻게 유도하는가를 기술하는 절차적 언어
세타(Theta) 조인 : 조인에 참여하는 두 릴레이션의 속성 값을 비교하여 만족하는 투플만 반환한다. * 조건 { =, ≠, ≤, ≥,<} 등의 비교 연산자 사용
동등 조인 : 세타 조인에서 = 연산자를 사용한 조인, 내부조인(inner join)이라고도 한다.
자연 조인 : 동등조인에서 조인에 참여한 속성이 두 번 나오지 않도록 두 번째 속성을 제거한 결과를 반환한다.
키 (Key)
데이터베이스에서 조건에 만족하는 튜플을 찾거나 순서대로 정렬할 때, 기준이 되는 속성.
기본키 : 하나의 튜플을 하나의 뜻으로 확인하기 위해 이용되는 키 (ID나 학번 등)
슈퍼키 : 한 릴레이션 내에서 유일성의 특성을 만족하는 속성 또는 속성들의 집합이다.
( 예 : 학번, 주민등록번호, (학번,주민등록번호), (학번,주민등록번호,성명.)
학번이나 주민번호가 최소성을 만족한다고해서 슈퍼키가 아닌 것은 아니며, 슈퍼키 중에서 유일성과 최소성을 모두 만족시키면 후보키가 된다.
예에서 (학번,주민등록번호) 와 같이 2개 이상의 필드를 조합하여 만든 키를 복합키라고 한다 )
후보키 : 릴레이션의 튜플(tuple)들을 구별할 수 있는 최소한의 속성들의 집합, 모든 릴레이션은 최소한 하나의 후보 키를 가진다. 슈퍼 키 중에서 유일성과 최소성을 모두 만족 시키는 키가 후보키가 된다. (학번이나 주민번호 등)
* 유일성(Unique) : 하나의 키 값으로 하나의 튜플만을 유일하게 식별 가능
* 최소성(Minimality) : 키를 구성하는 속성 하나를 제거하면 유일한 것으로 식별할 수 없게 되는 최소의 속성.
외래키 : 다른 릴레이션의 기본키를 참조하는 속성 또는 속성들의 집합
대체키 : 후보키 중에서 선정된 기본키를 제외한 나머지 후보키
예) 학번,주민번호,성명으로 구성된 <학생> 릴레이션에서 학번이 기본키로 설정되면 주민번호는 대체키가 된다. (성명은 중복가능하므로 슈퍼키도 후보키도 될 수 없다)
* 튜플 : 릴레이션의 각 행을 의미, row 혹은 record와 같다.
DDL (데이터 정의 언어 : Data Define Language)
Schema, Domain,Table, View, Index를 정의하거나 변경 또는 삭제할 때 사용하는 언어
DDL 유형
CREATE, ALTER, DROP
CREATE 문
CREATE SCHEMA
스키마를 정의하는 명령문 * 스키마 : 하나의 사용자에 속하는 테이블과 기타 구성요소를 구별짓기 위한 것 (자세한 내용은 http://npcore.tistory.com/70)
| CREATE SCHEMA 스키마명 AUTHORIZATION 사용자ID; | cs |
EX) 스키마 중학교를 정의, 사용자는 윤정수
| CREATE SCHEMA 중학교 AUTHORIZATION 윤정수 | cs |
EX2) 스키마 개인정보를 정의, 사용자는 김철수
| CREATE SCHEMA 개인정보 AUTHORIZATION 김철수; | cs |
CREATE TABLE
테이블을 정의하는 명령문
| CREATE TABLE 테이블명 (속성명 데이터_타입 [NOT NULL}, ... [, PRIMARY KEY (기본키_속성명, ...) ] [, UNIQUE (대체키_속성명, ...) ] [, FOREIGN KEY (이ㅗ래키_속성명 ...) REFERENCES 참조테이블(기본키_속성명, ...) ] [ON DELETE 옵션] [ON UPDATE 옵션] [, CONSTRAINT 제약조건명] [CHECK (조건식) ]); | cs |
테이블 생성시 칼럼의 값이 NULL값을 갖지 못하게 하려면
| CREATE TABLE User ( id CHAR(5) NOT NULL, (생략...) ); | cs
|
옵션
ON DELETE : 참조 테이블의 튜플이 삭제되었을 때 기본 테이블에 취해야 할 사항을 지정
ON UPDATE : 참조 테이블의 참조 속성 값이 변경되었을 때 기본 테이블에 취해야 할 사항을 지정
하위 옵션
CASCADE : 참조 테이블의 튜플이 삭제되면 기본 테이블의 관련 튜플도 모두 삭제되고, 변경시에도 동일한 액션을 취함
SET NULL : 참조 테이블에 변화가 있으면 기본 테이블의 관련 튜플의 속성 값을 기본값으로 변경
EX)
2번째 행 : Department 테이블에서 튜플이 삭제되면 관련된 모든 튜플의 'dept' 속성의 값을 NULL로 변경
3번째 행 : Department 테이블에서 튜플이 변경되면 관련된 모든 튜플의 'dept' 속성의 값도 같은 값으로 변경
| FOREIGN KEY(dept) REFERENCES Department(name) ON DELETE SET NULL ON UPDATE CASCADE | cs |
*주의할 점 : FOREIGN KEY~부터 ON UPDATE CASCADE까지 한 문장이므로 사이에 쉼표( , )를 쓰지 않는다.
| FOREIGN KEY (속성) REFERENCES 테이블(속성) | cs |
위의 FOREIGN 절은 다음과 같이 줄여 쓸수도 있다.
| FOREIGN KEY REFERENCES 테이블명 | cs |
VARCHAR2 데이터타입
String2 형태의 가변길이 값을 저장하며, 4000 바이트의 최대 가변길의 문자열을 저장하는데 사용한다.
CREATE DOMAIN
도메인을 정의하는 명령문 * 도메인 : 특정 속성(칼럼)에서 사용할 데이터 범위를 사용자가 정의하는 사용자 정의 데이터 타입
| CREATE DOMAIN 도메인명 데이터 타입 [DEFAULT] 기본값] -- 대괄호는 생략이 가능하단 의미 [CONSTRAINT 제약조건명 CHECK (범위 값) ]; | cs |
제약 조건 정의의 예
| CONSTRAINT isSex CHECK (sex='f' or sex='m') | cs |
FOREIGN KEY(ID) REFERENCES student(student_num)에서 제약조건명을 정의하기 위해, CONSTRAINT절 사용
| CONSTRAINT id_fk FOREIGN KEY(ID) REFERENCES student(student_num) | cs |
EX) 남, 여 와 같이 정해진 1개의 문자로 표현되는 도메인 SEX 를 정의하는 SQL문
| CREATE DOMAIN SEX CHAR(1) DEFAULT '남' CONSTRAINT isSex CHECK (VALUE IN ('남', '여')); | cs |
CREATE INDEX
인덱스를 정의하는 명령문 * 인덱스는 검색을 빠르게 하기 위해 만든 보조적 데이터 구조
| CREATE INDEX <인덱스명> ON 테이블명(속성명) | cs |
ex) <직원> 테이블에 대해 '이름'속성으로 '직원_이름'이란 인덱스 정의
| CREATE INDEX 직원_이름 ON 직원(이름) | cs |
UNIQUE가 사용되면 중복값이 없는 속성으로 인덱스 생성(생략시 중복값 허용)
ASC : 오름차순, DESC : 내림차순 (생략시 오름차순)
CLUSTER : 지정된 키에 따라 튜플들을 그룹으로 지정하기 위해 사용
| CREATE [UNIQUE] INDEX <인덱스명> ON 테이블명( {속성명 [ASC | DEXC] [,속성명 [ASC | DEXC] ]} ) [CLUSTER]; | cs |
EX) <Student> 테이블의 ssn 속성에 대해, 중복값이 없는 속성 'Stud_idx"라는 이름으로 오름차순 인덱스 생성
| CREATE UNIQUE INDEX Stud_idx ON Student(ssn ASC); | cs |
트리거(Trigger)
데이터베이스 시스템에서 데이터의 입력, 갱신, 삭제 등의 이벤트가 발생할 때마다 자동적으로 수행되는 사용자 정의 프로시저
| CREATE TRIGGER 트리거명 [동작시기 옵션] [동작옵션] ON 테이블명 REFERENCING [NEW | OLD] TABLE AS 테이블명 FOR EACH ROW WHEN 조건식 트리거 BODY | cs |
뷰(view)
하나 이상의 기본 테이블로부터 유도되는, 이름을 갖는 가상 테이블
| CREATE VIEW 뷰 이름[ (속성명 [, 속성명, ~~~~] ) ] -- 대괄호는 생략 가능, 괄호안의 속성은 VIEW에 적용, 생략시 SELECT문 속성명 자동적용 AS SELECT문; -- Sub Query | cs |
EX) 고객 테이블에서 주소가 안산시인 고객들의 성명과 전화번호를 보여주는 '안산고객' 이란 이름의 뷰 생성
| CREATE VIEW 안산고객(성명, 전화번호) -- 안산고객 이란 뷰 이름으로 정의, 속성명은 성명과 전화번호 / 속성명 기술하지 않으면 SELECT문 속성명 자동 적용 AS SELECT 성명, 전화번호 FROM 고객 WHERE 주소='안산시'; | cs |
EX 2) <교수> 테이블 에서, 재직년도가 10년 이상인 교수의 이름 속성을 추출한 <장기임용교수명단> 뷰를 정의하는 SQL문 작성
교수(@교수번호, 주민등록번호, 이름, 직위, 재직년도)
| CREATE VIEW 장기임용교수명단 AS SELECT 이름 FROM 교수 WHERE 재직년도 >= 10 WITH CHECK OPTION; | cs |
WITH CHECK OPTION은 생성된 뷰에 갱신이나 삽입 연산 수행 시,
뷰의 정의 조건(위의 예에서는 '재직년도' 10년 이상)을 위배하면 실행을 거절하는 옵션이다.
ALTER 문
EX) patient 테이블에 job 속성(문자 20자리)을 추가한다.
| ALTER TABLE patient ADD job CHAR(20); | cs |
EX) <학생> 테이블의 '사진'속성을 삭제하되 '사진' 속성을 참조하는 데이터도 함께 삭제한다.
| ALTER TABLE 제품 DROP COLUMN 사진 CASCADE; | cs |
EX) <학생> 테이블의 '나이' 속성의 기본값을 20으로 변경한다.
| ALTER TABLE 학생 ALTER 나이 SET DEFAULT 20; | cs |
SELECT문
: 릴레이션에 존재하는 튜플 중에서 선택 조건을 만족하는 튜플의 부분집합을 구하여 새로운 릴레이션을 만든다.
관계대수식 표기 ) 시그마를 사용, R은 릴레이션을 의미
σ<조건>(R)
ex) <학생>릴레이션에서 학년이 4학년인 릴레이션을 생성
σ학년=4(학생)
ex) <학생>릴레이션에서 학년, 학과 속성만 가지고 릴레이션 생성
σ학년,학과(학생)
특정 속성 값의 합계를 구하여 검색하고, 이 속성을 다른 속성으로 표현하고자 할 때
EX) 소매점명 과 반품수 를 검색하고, 반품수는 합계를 구해 총 반품수로 나타낸다.
| SELECT 소매점명, SUM(반품수) AS 총반품수 | cs |
중복되는 속성의 값 제거
Ex) 'name'을 표시하되, 같은 'name' 속성의 값은 한번만 표시
FROM 절
검색할 데이터가 들어있는 테이블 명을 기술
EX) 반품현황 , 소매점 테이블
WHERE 절
검색 조건을 기술. 다양한 조건 연산자 사용이 가능하고, 각 연산자 처리순서는 연산자 우선순위를 따른다.
하위질위
ex) <여가활동> 테이블에서 취미가 '나이트댄스'인 사원('이름')에 대해, <사원> 테이블에서 사원의 '이름'과 '주소'를 검색하는 SQL문
| SELECT 이름, 주소 FROM 사원 WHERE 이름 IN (SELECT 이름 FROM 여가활동 WHERE 취미='나이트댄스); | cs |
ex) 여가활동이 없는 사원들을 검색하는 SQL문
| SELECT * FROM 사원 WHERE 이름 NOT IN (SELECT 이름 FROM 여가활동); | cs |
ORDER BY 절
특정 속성을 기준으로 정렬하여 검색할 때 사용. [ASC | DESC] : ASC(오름차순)이 기본값이며, DESC 내림차순 정렬
EX) 소매점 테이블에서 반품수 합계 (총 반품수)를 내림차순으로 표시하는 SQL문
COUNT 함수와 GROUP BY 활용
<결제> 테이블에서 '결제여부'별 학생수를 검색 (학생수는 COUNT 함수로 집계 후 학생수라는 속성을 부여한다.)
| SELECT 결제여부, COUNT(*) AS 학생수 FROM 결제 GROUP BY 결제여부 | cs |
JOIN 연산
공통 속성을 중심으로 2개의 릴레이션을 하나로 합쳐서 새로운 릴레이션을 만든다. 기호 ⋈
두 테이블을 특정 속성(칼럼)으로 동일 JOIN 하고자 할 때
EX) 반품현황, 소매점 테이블이 있고 두 테이블을 '소매점 코드'로 조인하고자 한다.
| WHERE 반품현황.소매점 코드 = 소매점.소매점코드 |
PROJECT 연산
주어진 릴레이션에서 속성 리스트에 제시된 속성 값만 추출하여 새로운 릴레이션을 만든다. 기호 π (파이)
연산 결과에 중복이 발생하면 중복은 제거된다.
관계대수식 표기 )
π <속성리스트> (R) * R은 릴레이션을 의미
ex) <성적> 릴레이션에서 이름과 국어 성적 추출
π이름,국어(성적)
DML (Data Manipulation Language)
데이터베이스 사용자가 응용 프로그램이나 질의어를 통해 저장된 데이터를 관리하는데 사용되는 언어
INSERT : 테이블에 새로운 튜플 삽입
EX) 사원 테이블의 성명과 연차 속성에 새로운 데이터를 삽입
| INSERT INTO 사원(성명, 연차) VALUES ('김민정', 2); | cs |
ex) SELECT문을 사용하여 다른 테이블의 검색 결과 삽입
| INSERT INTO 기획부(성명, 경력, 주소, 기본급) SELECT 성명, 경력, 주소, 기본급 FROM 사원 WHERE 부서='기획'; | cs |
DELETE : 테이블에서 튜플 삭제
EX) 사원 테이블에서 이름 칼럼의 데이터가 조정윤인 튜플 삭제
| DELETE FROM 사원 WHERE 이름='조정윤'; | cs |
EX) 사원 테이블의 전체 데이터 삭제(WHERE 조건이 없으므로 모두 삭제된다)
UPDATE : 테이블에서 튜플 내용 갱신
EX) 사원 테이블에서 김민정과 이철수란 이름이 있으면 부서를 편집으로 갱신
| UPDATE 사원 SET 부서='편집' WHERE 이름 IN ('김민정', '이철수') | cs |
트랜잭션(Transaction)
데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산
- 제어명령어 : COMMIT, ROLLBACK
: 수행한 연산은 DB에 최종 반영시 커밋(COMMIT)하여 연산을 마침
: 또는 롤백(ROLLBACK)을 통해 해당 작업을 되돌릴 수 있음
튜닝 ( Tunning )
데이터베이스를 최적화 하는 것. (업무의 최적화, 하드웨어적인 병목 현상 해결, SQL 최적화 등)
식별관계( Identifying Relationship )
부모 테이블의 기본키가 자식 테이블의 기본키의 구성원으로 전이되는 식별관계 (부모가 자식의 모든 정보를 저장하게 됨)
ex) <지점> 테이블에 지점코드(PK) 칼럼이 <지점 세부> 테이블의 지점코드(FK) 의 구성원일 때
( <지점> 테이블의 지점코드는 <지점세부> 테이블의 외래키이면서 동시에 기본키)
정규화
속성들 간의 종속성을 분해해서 기본적으로 하나의 종속성이 하나의 릴레이션에 표현되도록 분해하는 것
1NF (제1 정규형)
테이블 R에 속한 모든 속성의 도메인이 원자 값만으로 되어 있는 정규형
(제1 정규화라고 하면 비정규 릴레이션에서 바로 이 1NF로 만드는 것을 의미하며, 1정규화를 거쳐 1정규형이 되었다고 표현한다)
EX) 하나의 학번(속성)이 여러 개의 수강 과목(값)을 가지고 있을 때, 이러한 다중 값 속성을 제거해서 릴레이션의 모든 속성 값이 원자 값만을 갖도록 한다.
2NF (제 2 정규형)
테이블 R이 제 1 정규형이고, 기본키가 아닌 모든 속성이 기본키에 대하여 완전 함수적 종속을 만족하는 정규형 (즉, 부분함수적 종속을 제거)
3NF (제 3 정규형)
테이블 R이 제 2 정규형이고 기본키가 아닌 모든 속성이 기본 키에 대해 이행적 함수적 종속을 만족하지 않는 정규형
BCNF (보이스 코드 정규형 Boyce-Codd Normal Form) * 3 정규형과 4정규형의 사이에 속한다.
테이블 R에서 모든 결정자가 후보키인 정규형이다.
* 결정자 : 학번->이름 일때 '학번'이 결정자이고 '이름'이 종속자이다. (학번에 따라 이름이 결정)
ex) 보이스 코드 정규화의 예
<주문정보>
주문번호 |
거주지 |
구매자 |
BI0124 |
부산 |
김길동 |
BI0125 |
대구 |
이상민 |
BI0126 | 부산 | 김길동 |
BI0127 | 서울 | 홍영수 |
<주문정보> 릴레이션에는 결정자이지만 후보키가 아닌 속성이 존재한다. ( '구매자' -> '거주지역'에서 '구매자'는 결정자이지만 후보키가 아님 )
같은 구매자가 시간을 두고 구매한 건이 있을 때, 구매자 속성만으로는 레코드를 유일하게 식별할 수 없기에 후보키가 아닌 속성을 제거해야한다.
함수적 종속 관계
어떤 릴레이션 R에서, X와 Y를 각각 R의 애트리뷰트 집합의 부분 집합이라고 하면, 애트리뷰트 X의 값 각각에 대해 시간에 관계없이 항상 애트리뷰트 Y의 값이 오직 하나만 연관되어 있을 때 Y는 X에 함수 종속이라 하고, X → Y라고 표기한다.
정규화를 하기 위해서는 해당 릴레이션에 존재하는 함수적 종속 을 먼저 파악해야 한다.
<학생>릴레이션에서 '학번' 속성이 '학과' 속성을 함수적으로 결정한다고 하면, '학과'는 '학번'에 함수적 종속이라고 하고,
이를 학번 -> 학과 와 같이 표현한다.
EX) 주문 릴레이션 (주문번호, 부품번호, 거래처코드, 거래처지역, 부품가격, 주문물량, 주문날짜)
주문번호, 부품번호는 식별자이며, 이외의 다른 모든 속성은 기본키인 (주문번호, 부품번호)에 의해 함수적으로 종속된다.
표기 ) 주문번호, 부품번호 -> 거래처 코드, 거래처 지역....
주문번호가 주문 날짜를 결정한다. (특정 주문 번호는 항상 같은 주문 날짜를 가진다고 할 때)
표기 ) 주문번호 -> 주문날짜
완전 함수적 종속
EX) 학번(PK), 과목(PK), 학점 속성을 가진 릴레이션 R이 있다고 할 때, 기본키인 '학번'과 '과목'속성을 참고해야만 '학점'을 알 수 있을 때, 이는 완전 함수적 종속이다.
부분 함수적 종속
학번(PK, 과목코드(PK), 과목명 속성을 가진 릴레이션 R이 있다고 할 때, 과목코드만 참고 해도 '과목명'을 알 수 있기 때문에 이는, 부분 함수적 종속이다.
이행적 함수 종속
'주문번호'가 '상품 코드'와 '회원 ID'를 결정지을 때, '회원 ID' 만으로 '회원명'과 '전화번호'를 알 수 있다면 이는 A->B->C가 된다.
즉, A->B 이고 B->C 일때, A->C를 만족하므로 이행적 함수 종속이 생긴 것이다.
다치 종속
A, B, C 기본키 속성을 가진 릴레이션 R이 있다고 할 때, A->B이지만 C는 다른 여러개의 속성에 함수적 종속된다면, 이는 다치 종속이 생긴 것이다. 제 4정규화에서 다치 종속성을 제거하게 된다.
역정규화
분해된 릴레이션을 다시 합치는 것
역정규화를 하는 이유 : 과도하게 정규화된 (분해된) 릴레이션으로 성능이 떨어질 수 있다, 분해된 릴레이션을 JOIN을 사용해 연결하는 질의 소요 비용이 증가한다
무결성
데이터베이스에서 무결성은 결함이 없는 성질을 의미하며, 정확성, 유효성을 뜻한다. 무결성의 핵심은 데이터베이스에 저장된 데이터 값을 정확하게 유지하는데 있다.
참조 무결성 : 외래키 값은 NULL 이거나 참조 릴레이션의 기본키 값과 동일해야 한다!
개체 무결성 : 기본 릴레이션의 기본키를 구성하는 어떤 속성도 NULL 일 수 없다.
도메인 무결성 : 특정 속성의 값이 그 속성이 정의된 도메인에 속한 값이어야 한다. (예 : <고객> 릴레이션의 성별 속성에는 '남', '여'만 존재)
* 릴레이션 : 데이터의 집합, 테이블이라고도 한다.
갱신 분실(Lost Update)
2개 이상의 트랙잭션이 같은 데이터를 공유하여 갱신할 때 생기는 문제.
DCL(Data Control Language)
데이터의 보안, 무결성, 회복, 병행 제어 등을 정의하는데 사용되는 언어
GRANT : 권한 부여를 위한 명령어
REVOKE : 권한 취소를 위한 명령어
사용자 등급 지정
| GRANT 사용자등급 TO 사용자id리스트[IDENTIFIED BY 암호]; | cs |
사용자 등급 해제
| REVOKE 사용자등급 FROM 사용자id리스트; | cs |
테이블 및 속성에 대한 권한 부여
| GRANT 권한종류 ON 개체 TO 사용자 [WITH GRANT OPTION]; | cs |
* WITH GRANT OPTION : 부여받은 권한을 다른 사용자에게도 부여할 수 있는 권한을 부여
테이블 및 속성에 대한 권한 취소
| REVOKE [GRANT OPTION FOR] 권한종류 ON 개체 FROM 사용자 [CASCADE]; | cs |
* GRANT OPTION FOR : 다른 사용자에게 권한을 부여할 수 있는 권한을 취소
* CASCADE : 권한 취소 시, 권한을 부여받았던 사용자가 다른 사용자에게 부여한 권한도 연속적(CASCADE)으로 취소
* 자신에게 특정 권한이 없어지면 다른 사용자에게 그 권한을 부여할 수 없다.
REVOKE UPDATE ON 수강 FROM 김민희 CASCADE; 라고 명령을 내리면 '김민희' 사용자에게 UPDATE권한이 없어짐과 함께 다른 사용자에게 권한을 부여할 수 있는 권한, 권한을 부여받았던 사용자가 다른 사용자에게 부여한 권한도 연속적으로 취소된다.
* 다음에 주의
REVOKE GRANT OPTION FOR INSERT ON 강좌 FROM 김철수; 라고 하면 '김철수' 사용자의 INSERT 권한은 유지하면서 다른 사용자에게 권한을 부여할 수 있는 권한만 취소하는 것이다.
REVOKE GRANT OPTION FOR UPDATE ON 강좌 FROM 김철수 CASCADE;
'임꺽정' 유저에게 부여한 <강좌> 테이블의 권한 중 UPDATE 권한을 다름 사람에게 부여할 수 있는 권한과 이미 다른 사람에게 부여했던 권한도 함께 취소하며, 임꺽정 자신은 UPDATE 권한을 유지한다.