2009년 2월 16일 월요일

TDE [encrypted column] NULL Manage

WALLETOPEN 시에는 일반 쿼리 처럼 사용해도 문제가 전혀 없다.

하지만 WALLET CLOSE 시에는 몇가지 CASE 가 존재한다.


* WALLET CLOSE 상태일때 산술연산 ( + / - x )

                 - SELECT Condition1 (+ / - X ) Condition2 from table where ..;

Condition1

Condition2

Evaluation

A Is NULL

B Is NULL

NULL

A Is NOT NULL

B IS NULL

ERROR

A IS NULL

B IS NOT NULL

NULL

A IS NOT NULL

B IS NOT NULL

ERROR


*  NULL + C1 + C2 +.....Cn = NULL

연산시 NULL이 존재한다면 뒤에 연산이 NOT NULL 이라도 뒤의 연산은
하지 않고 바로 NULL 을 리턴한다. ( 다시 말해 연산시 앞에 NULL 이 있는
경우에는 뒤에 암호화된 데이터가 있더라도 연산을 하지 않기 때문에 에러가
발생하지 않는다. )

*  C1 + C2 +.....Cn + NULL = ERROR

하지만 연산하는 첫 상수의 값이 NOT NULL 일경우는 값을 복호화할수 없으므로
에러를 리턴한다.

sum(),avg(),abs(),max(),min(),count()... 함수연산

                 T1

             C1            C2           C3          C4

              1                            3

                              1            2

              1              2



1. select sum(c1) from t1;
- ORA-28365: wallet is not open

2. select sum(c2) from t1;
- ORA-28365: wallet is not open

3. select sum(c3) from t1;
- ORA-28365: wallet is not open

4. select sum(c4) from t1;
- 정상 출력

5. select count(c4) from t1;
     COUNT(C4)
      ----------
      0  

 6. select count(c2) from t1;
- ORA-28365: wallet is not open


 sum(),avg(),abs(),max(),min(),count()등 내부적으로 수학적인 연산이 필요한 경우에는 에러를
 리턴한다. 또한 NULL 집합에서의 연산은 NULL 을 리턴하지만 일반연산과의 다른점은 함수를
 이용한 연산은 NOT NULL이 하나라도 있으면 에러를 리턴한다는 점이다.
 (일반적으로 함수를 이용한 연산은 NULL 을 고려하지 않기 때문이다.)

댓글 없음:

댓글 쓰기