Oracle/tde

TDE

pbj1102 2022. 1. 24. 16:45
반응형

## TDE (Transparent Data Encryption)

 - 운영체제의 해킹, 스토리지 및 백업 미디어의 도난으로 인한 데이터 유출 방지

1) 테이블레벨암호화(10gR2) = Transparent Data Encryption = 컬럼 레벨 암호화

2) 테이블스페이스암호화(11g) = Tablespace Encryption

 - 암호화키
1) 테이블 키 : 테이블의 데이터를 암호화

2) 마스터 키 : 테이블키를 암호화하여 저장
       Oracle wallet 이라는 패스워드 기반 PKCS#12 호환컨테이너에 저장되어 보호 ( 10gR2 )
       Hardware Security Module (HSM) 에 따로 저장할 수 있는 방법을 제공 => 솔루션


- ORACLE 10gR2 부터 제공되는 Oracle Advanced Security Option 

- 목적
: 운영체제의 해킹, 스토리지 및 백업 미디어의 도난으로 인한 데이터 유출 예방
- 대상
: 주민등록번호, 신용카드번호 와 같은 민감정보

- TDE 는 Default 키 길이로 192비트인 AES암호화 알고리즘 사용 ( AES192 )

- 메모리(SGA) 로 읽어올때 복호화, 데이터를 내려 쓸 때 암호화

# 테이블 키
- 테이블 내 하나 이상의 컬럼을 암호화 할때 사용하는 암호화키
- 각 테이블당 하나씩 할당 되며 마스터키로 암호화하여 Oralce 데이터딕셔너리테이블에 저장


# Wallet
- 패스워드 기반의 PKCS#12 컨테이너로서 TDE 에서 마스터키를 안전하게 보관하기 위해 사용
- Wallet 에 입력된 패스워드를 통해 wallet 이 오픈 된 상태일때만 암호화 된 데이터에접근할 수 있다.
- DBA 권한과 Wallet 을 오픈할 수 있는 보안 관리자의 역할을 분리하여 보안

* 법규 "separation of duties" 조항을 만족시켜야함 


# TDE 적용 방법 Wallet 및 마스터 키 관리



# TDE Wallet 생성위치

- wallet 생성위치 지정 
/u01/app/oracle/product/11.2.0/network/admin/sqlnet.ora 

ENCRYPTION_WALLET_LOCATION=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=/u01/app/oracle/admin/orcl/wallet))


- oracle profile 에 wallet 환경 변수 추가
export PATH=$PATH:$ORACLE_BASE/admin/orcl/wallet



- wallet 마스터키 입력
conn /as sysdba
ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY "SPC";

* Wallet 생성위치에 wallet 이 없을 경우 
=> ewalet.p12 파일이 생성됨

[oracle@DBTEST wallet]$ pwd
/u01/app/oracle/admin/orcl/wallet
[oracle@DBTEST wallet]$ ls -al
-rwxr-x--- 1 oracle oinstall 1837 Jan 18 11:22 ewallet.p12



# Wallet Open & Close
데이터를 암/복호화 하기 위해서는 마스터키가 존재하는 wallet 을 open 시켜야한다.
wallet 을 open 시키지 않고 db를 운영할 수 있지만
  close 상태에서 암호화된 데이터에 접근할 경우 오류를 발생시킨다.


- wallet 상태보기 
V$ENCRYPTION_WALLET
GV$ENCRYPTION_WALLET

SELECT * FROM V$ENCRYPTION_WALLET;

SQL> SELECT * FROM V$ENCRYPTION_WALLET;
WRL_TYPE        WRL_PARAMETER                            STATUS
--------------- ---------------------------------------- ----------
file            /u01/app/oracle/admin/orcl/wallet        OPEN


SELECT * FROM GV$ENCRYPTION_WALLET;

    INST_ID WRL_TYPE        WRL_PARAMETER                            STATUS
---------- --------------- ---------------------------------------- ----------
         1 file            /u01/app/oracle/admin/orcl/wallet        OPEN



- wallet open
ALTER SYSTEM SET WALLET OPEN IDENTIFIED BY SPC;

- wallet close
ALTER SYSTEM SET WALLET CLOSE;



# Wallet 자동 오픈
11.1.0.7 부터 wallet 을 자동 오픈 할 수 있는 기능을 제공

$ orapki wallet create-wallet<$ORACLE_BASE/admin/orcl/wallet>-auto_login_local

pwd 
/u01/app/oracle/admin/orcl/wallet
[oracle@DBTEST wallet]$ ls -al
-rw-r--r-- 1 oracle oinstall 1721 Jan 18 11:31 -auto_login_local


# Wallet passwd 변경
$ orapki wallet change_pwd -wallet wallet_location
Oracle PKI Tool : Version 11.2.0.1.0 - Production
Copyright (c) 2004, 2009, Oracle and/or its affiliates. All rights reserved.

Enter wallet password:      

New password:
Enter wallet password:      
   
PKI-01002: Invalid password.





#마스터키 변경 및 추가
- 마스터키 변경 -> 기존 삭제 후 새로 생성

- 주의사항
암호화된 칼럼이 있을 상태에서 마스터키 변경이 이루어질 경우 암호화된 데이터를 복호화 할 수가 없음
   => 방안
마스터키 추가 ( 패스워드는 기존가 동일하게 설정 )
=> 기존의 마스터키로 암호화된 파일은 기존의 마스터키로 복호화가 이루어지며
=> 새롭게 추가한 마스터키 생성이후 데이터 암호화된 칼럼들은 새롭게 만들어진 마스터키로 인해 복호화가 이루어진다


=> Wallet 은 항상 백업을 해야함 ( 삭제되면 암호화된 테이블을 복호화 할 수 가 없음 )



alter system set encryption key identified by "SPC";




# 암호화 되는 칼럼 타입
- TYPE
BINARY_DOUBLE
BINARY_FLOAT
CHAR
DATA
INTERVAL DAY TO SECOND
INTERVAL YEAR TO MONTH
NCHAR
NUMBER
NVARCHAR2
RAW
TIMESTAMP
VARCHAR2


# 암호화되는 칼럼을 포함한 테이블 생성

create table enc_test ( 
    first_name varchar(10),
    last_name varchar(30),
    ID  number,
    salary number(6) ENCRYPT);


insert into enc_test values ( 'Steven','King',100,24000);
insert into enc_test values ( 'Neena','Kochhar',101,17000);
insert into enc_test values ( 'Lex','De Haan',102,17000);
insert into enc_test values ( 'Alex','Hunold',103,9000);
insert into enc_test values ( 'Bruce','Ernst',104,6000);
insert into enc_test values ( 'David','Austin',105,4800);
insert into enc_test values ( 'Valli','Pata',106,4800);
insert into enc_test values ( 'Diana','Loren',107,4200);
insert into enc_test values ( 'Nancy','Green',108,12000);
insert into enc_test values ( 'Dani','FAVIET',109,9000);


SQL> desc enc_test;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 FIRST_NAME                                         VARCHAR2(10)
 LAST_NAME                                          VARCHAR2(30)
 ID                                                 NUMBER
 SALARY                                             NUMBER(6) ENCRYPT



# 기존 칼럼 암호화/복호화 
 ALTER TABLE ENC_TEST MODIFY ( SALARY ENCRYPT);
 ALTER TABLE ENC_TEST MODIFY ( SALARY DECRYPT);

# 기존 테이블에 암호화 테이블 추가
ALTER TABLE ENC_TEST add (dept varchar2(20) encrypt);



# 암호화 알고리즘 지정 및 변경

- TDE 에서 지원하는 알고리즘
알고리즘 키사이즈 파라미터 명
1) AES ( Advanced Encryption Standart )  128 bit AES128
2) AES ( Advanced Encryption Standart )  192 bit AES192
1) AES ( Advanced Encryption Standart )  256 bit AES256
1) 3DES ( Advanced Encryption Standart )  168 bit 3DES168

- Default : AES192

- 테이블 생성시 알고리즘 지정

CREATE TABLE table_name (
first_name varchar2(128),
last_name varchar2(128),
id number,
salary nuber(6) ENCRYPTION '알고리즘 파라미터 명' );


- 기존 테이블 암호화

ALTER TABLE table_name MODIFY (column_name ENCRYPT USING '<알고리즘 파라미터명>)'





ALTER TABLE ENC_TEST MODIFY (dept ENCRYPT USING 'AES256');
==> ora-28340
=> 테이블에 대한 다른 암호화 알고리즘이 선택 되었습니다.


SQL> desc enc_test;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 FIRST_NAME                                         VARCHAR2(10)
 LAST_NAME                                          VARCHAR2(30)
 ID                                                 NUMBER
 SALARY                                             NUMBER(6) ENCRYPT
 DEPT                                               VARCHAR2(20)


현재 SALARY 칼럼이 AES192 (Default) 암호와 되어 AES256 으로 암호화 불가능
=> 각 테이블에 대한 암호화키는 하나만 존재가 가능하므로



# 테이블 키 재생성
- 각 테이블은 오직 하나의 테이블키를 갖는다.

- 테이블 키 재생성
재생성 하는 경우 테이블안의 암호화 되어 있는 데이터 모두 다시 암호화 되어짐

ALTER TABLE enc_test REKEY USING '알고리즘 파라미터';

==> 재성성 경우 기존 데이터 양 체크 필요
=> 모든 데이터를 다시 암호화 하므로 시간소요 크다.
=> 테이블키 재생성 전후에 대한 Wallet 백업 필요







# 인덱스 생성
- 암호화를 이용할 경우 암호화 컬럼에 대하여 B-tree 인덱스 생성 가능
컬럼에 NO SALT 옵션으로 암호화가 되어있어야함

- 테이블마다 고유의 암호화키를 가지므로 Foreign key 지원 x
- primary key 사용 x 
- 암호화된 칼럼에 대하여 생성된 인덱스 equlity search 만 적용
range search 적용 x
=> Range search 경우
암호화 텍스트에서도 암호화 되기 전 텍스트의 대'소관계가 그대로 유지되어야하는데
이렇게 되면 보안도가 낮아지기 때문


* NO SALT 옵션
  - 암호화된 컬럼에 대하여 인덱스를 생성할 경우 암호화시 NO SALT 옵션 설정
SALT = 보안도를 강화하기 위한 기능
-> 같은 데이터가 다르게 암호화됨
=> 암호화키를 생성할수 없음. 그러므로 SALT 비활성

ALTER TABLE enc_test MODIFY ( id ENCRYPT NO SALT);
ALTER TABLE enc_test MODIFY ( dept ENCRYPT SALT);



* SALT 된 칼럼 인덱스 생성시

create unique index idx_dept on enc_test(dept);

ORA-28338 : 열은 salt 사용하여 동시에 인덱스화 및 암호화될 수 없음




# 백업 및 복구
imp/exp << TDE 를 통해서 암호화된 테이블을 지원하지 않음 
=> EXPORT 시 에러 발생



[oracle@DBTEST wallet]$ exp system/oracle file=enc_test.dmp tables=enc_test;

Export: Release 11.2.0.1.0 - Production on Mon Jan 18 13:48:49 2016

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.


Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Export done in KO16MSWIN949 character set and AL16UTF16 NCHAR character set

About to export specified tables via Conventional Path ...
EXP-00107: Feature (COLUMN ENCRYPTION) of column ID in table SYSTEM.ENC_TEST is not supported. The table will not be exported.






그러므로 pump 를 사용.



[oracle@DBTEST wallet]$  expdp system/oracle dumpfile=enc_test.dmp tables=enc_test logfile=enc_test_ex.log

Export: Release 11.2.0.1.0 - Production on Mon Jan 18 13:50:10 2016

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "SYSTEM"."SYS_EXPORT_TABLE_01":  system/******** dumpfile=enc_test.dmp tables=enc_test logfile=enc_test_ex.log 
Estimate in progress using BLOCKS method...
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 64 KB
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/PRE_TABLE_ACTION
ORA-39127: unexpected error from call to export_string :=SYS.DBMS_TRANSFORM_EXIMP.instance_info_exp('AQ$_ORDERS_QUEUETABLE_S','IX',1,1,'11.02.00.00.00',newblock) 
ORA-00376: file 5 cannot be read at this time
ORA-01110: data file 5: '/u01/app/oracle/oradata/orcl/example01.dbf'
ORA-06512: at "SYS.DBMS_TRANSFORM_EXIMP", line 191
ORA-06512: at line 1
ORA-06512: at "SYS.DBMS_METADATA", line 6751
ORA-39127: unexpected error from call to export_string :=SYS.DBMS_TRANSFORM_EXIMP.instance_info_exp('AQ$_STREAMS_QUEUE_TABLE_S','IX',1,1,'11.02.00.00.00',newblock) 
ORA-00376: file 5 cannot be read at this time
ORA-01110: data file 5: '/u01/app/oracle/oradata/orcl/example01.dbf'
ORA-06512: at "SYS.DBMS_TRANSFORM_EXIMP", line 191
ORA-06512: at line 1
ORA-06512: at "SYS.DBMS_METADATA", line 6751
. . exported "SYSTEM"."ENC_TEST"                         6.882 KB      10 rows
ORA-39173: Encrypted data has been stored unencrypted in dump file set.
Master table "SYSTEM"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SYSTEM.SYS_EXPORT_TABLE_01 is:
  /u01/app/oracle/product/11.2.0/rdbms/log/enc_test.dmp
Job "SYSTEM"."SYS_EXPORT_TABLE_01" completed with 3 error(s) at 13:50:17




**ORA-39173: Encrypted data has been stored unencrypted in dump file set
=> 암호화된 칼럼이 암호화되지 않은 상태로 덤프 파일에 저장될 경우 에러 발생




덤프시에도 암호화를 적용하기 위해 encryption_password='SPC' 옵션을 설정한다. 





expdp system/oracle dumpfile=enc_test_2.dmp tables=enc_test encryption_password='SPC' logfile=enc_test_ex2.log

Export: Release 11.2.0.1.0 - Production on Mon Jan 18 13:56:54 2016

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "SYSTEM"."SYS_EXPORT_TABLE_01":  system/******** dumpfile=enc_test_2.dmp tables=enc_test encryption_password=******** logfile=enc_test_ex2.log 
Estimate in progress using BLOCKS method...
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 64 KB
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/PRE_TABLE_ACTION
ORA-39127: unexpected error from call to export_string :=SYS.DBMS_TRANSFORM_EXIMP.instance_info_exp('AQ$_ORDERS_QUEUETABLE_S','IX',1,1,'11.02.00.00.00',newblock) 
ORA-00376: file 5 cannot be read at this time
ORA-01110: data file 5: '/u01/app/oracle/oradata/orcl/example01.dbf'
ORA-06512: at "SYS.DBMS_TRANSFORM_EXIMP", line 191
ORA-06512: at line 1
ORA-06512: at "SYS.DBMS_METADATA", line 6751
ORA-39127: unexpected error from call to export_string :=SYS.DBMS_TRANSFORM_EXIMP.instance_info_exp('AQ$_STREAMS_QUEUE_TABLE_S','IX',1,1,'11.02.00.00.00',newblock) 
ORA-00376: file 5 cannot be read at this time
ORA-01110: data file 5: '/u01/app/oracle/oradata/orcl/example01.dbf'
ORA-06512: at "SYS.DBMS_TRANSFORM_EXIMP", line 191
ORA-06512: at line 1
ORA-06512: at "SYS.DBMS_METADATA", line 6751
. . exported "SYSTEM"."ENC_TEST"                         6.890 KB      10 rows
Master table "SYSTEM"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SYSTEM.SYS_EXPORT_TABLE_01 is:
  /u01/app/oracle/product/11.2.0/rdbms/log/enc_test_2.dmp
Job "SYSTEM"."SYS_EXPORT_TABLE_01" completed with 2 error(s) at 13:56:57









[oracle@DBTEST ~]$ impdp system/oracle dumpfile=enc_test_2.dmp tables=enc_test encryption_password='SPC' logfile=enc_test_imp.log

Import: Release 11.2.0.1.0 - Production on Mon Jan 18 14:03:34 2016

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Master table "SYSTEM"."SYS_IMPORT_TABLE_01" successfully loaded/unloaded
Starting "SYSTEM"."SYS_IMPORT_TABLE_01":  system/******** dumpfile=enc_test_2.dmp tables=enc_test encryption_password=******** logfile=enc_test_imp.log 
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
. . imported "SYSTEM"."ENC_TEST"                         6.890 KB      10 rows
Job "SYSTEM"."SYS_IMPORT_TABLE_01" successfully completed at 14:03:36









11g 부터는 덤프파일에 있는 뎅디터 전체를 암호화 할 수 있는 파라미터가 추가됨

1) ENCRYPTED_COLUMNS_ONLY : TDE로 암호화된 커러럼만 암호화 형태로 저장
2) DATA_ONLY : 데이터만 덤프파일에 암호화된 형태로 저장
3) METADATA_ONLY : 메타데이터만 덤프파일에 암호화된 형태로 저장
4) ALL : 모든 데이터 및 메타데이터가 덤프파일에 암호화된 형태로 저장 ( Default )







암호화된 컬럼만 덤프시 암호화

expdp system/oracle dumpfile=enc_test_col.dmp tables=enc_test encryption=encrypted_columns_only encryption_password=SPC

Export: Release 11.2.0.1.0 - Production on Mon Jan 18 14:08:26 2016

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "SYSTEM"."SYS_EXPORT_TABLE_01":  system/******** dumpfile=enc_test_col.dmp tables=enc_test encryption=encrypted_columns_only encryption_password=******** 
Estimate in progress using BLOCKS method...
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 64 KB
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/PRE_TABLE_ACTION
ORA-39127: unexpected error from call to export_string :=SYS.DBMS_TRANSFORM_EXIMP.instance_info_exp('AQ$_ORDERS_QUEUETABLE_S','IX',1,1,'11.02.00.00.00',newblock) 
ORA-00376: file 5 cannot be read at this time
ORA-01110: data file 5: '/u01/app/oracle/oradata/orcl/example01.dbf'
ORA-06512: at "SYS.DBMS_TRANSFORM_EXIMP", line 191
ORA-06512: at line 1
ORA-06512: at "SYS.DBMS_METADATA", line 6751
ORA-39127: unexpected error from call to export_string :=SYS.DBMS_TRANSFORM_EXIMP.instance_info_exp('AQ$_STREAMS_QUEUE_TABLE_S','IX',1,1,'11.02.00.00.00',newblock) 
ORA-00376: file 5 cannot be read at this time
ORA-01110: data file 5: '/u01/app/oracle/oradata/orcl/example01.dbf'
ORA-06512: at "SYS.DBMS_TRANSFORM_EXIMP", line 191
ORA-06512: at line 1
ORA-06512: at "SYS.DBMS_METADATA", line 6751
. . exported "SYSTEM"."ENC_TEST"                         7.867 KB      10 rows
Master table "SYSTEM"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SYSTEM.SYS_EXPORT_TABLE_01 is:
  /u01/app/oracle/product/11.2.0/rdbms/log/enc_test_col.dmp
Job "SYSTEM"."SYS_EXPORT_TABLE_01" completed with 2 error(s) at 14:08:29





[oracle@DBTEST ~]$ impdp system/oracle dumpfile=enc_test_col.dmp tables=enc_test encrption_password=SPC
LRM-00101: unknown parameter name 'encrption_password'

[oracle@DBTEST ~]$ impdp system/oracle dumpfile=enc_test_col.dmp tables=enc_test encryption_password=SPC

Import: Release 11.2.0.1.0 - Production on Mon Jan 18 14:10:25 2016

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Master table "SYSTEM"."SYS_IMPORT_TABLE_01" successfully loaded/unloaded
Starting "SYSTEM"."SYS_IMPORT_TABLE_01":  system/******** dumpfile=enc_test_col.dmp tables=enc_test encryption_password=******** 
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
. . imported "SYSTEM"."ENC_TEST"                         7.867 KB      10 rows
Job "SYSTEM"."SYS_IMPORT_TABLE_01" successfully completed at 14:10:26






# 컬럼 암호화 관련 딕셔너리 뷰


- DBA_ENCRYPTED_COLUMNS
- ALL_ENCRYPTED_COLUMNS
- USER_ENCRYPTED_COLUMNS





col encryption_alg format a30
SQL> SELECT * FROM USER_ENCRYPTED_COLUMNS;

TABLE_NAME      COLUMN_NAM ENCRYPTION_ALG                 SAL INTEGRITY_AL
--------------- ---------- ------------------------------ --- ------------
ENC_TEST        ID         AES 256 bits key               NO  SHA-1
ENC_TEST        SALARY     AES 256 bits key               YES SHA-1
ENC_TEST        DEPT       AES 256 bits key               YES SHA-1






# TDE 에서 지원하는 데이터 타입별 사이즈

CHAR  - 1932 Byte
VARCHAR2  - 3932 Byte
NVARCHAR2 - 1966 Byte
VARCHAR - 966 Byte



## 11G 부터 TABLESPACE 암호화 가능

create tablespace enc_ts
datafile '/home/oracle/ts/enc_dat.dbf' size 150M
encryption
default storage (encrypt)



- 주의사항
- 이미 생성된 테이블스페이스에는 암호화 불가능
  => 서브쿼리 or MOVE 사용

- 테이블 스페이스 암호화에서는 NO SALT 옵션 불가능
- 암호화한 테이블스페이스는 암호화해제 불가능
=> 복호화를 원할 경우... 서브쿼리로 다른 테이블스페이스, move 로 재생성...





create tablespace enc_ts_aes256
datafile '/home/oracle/ts/enc_aes256_dat.dbf' size 150M
encryption
ENCRYPTION USING 'AES256' default storage (encrypt)



## 기존 테이블스페이스 -> 암호화 테이블스페이스로 move

alter table scott.emp move tablespace enc_ts;


## 서브쿼리를 이용하여 데이터 옮기는 법

create table emp_en tablespace enc_ts
as
select * from scott.emp;




#### 11g 에서 사용하는 테이블스페이스 암호화 경우 Range scan 이 가능하다.
==> TDE를 이용한 컬럼 암호화는 Equality search 만 가능

==> 컬럼 암호화와 다르게 테이블스페이스 암호화는 테이블스페이스에 해당하는 
데이터블록전체가 암호화 되므로.



SQL> select tablespace_name , encrypted from user_tablespaces where tablespace_name='ENC_TS';

TABLESPACE_NAME                ENC
------------------------------ ---
ENC_TS                         YES





SQL> select table_name, tablespace_name from user_tables where table_name='EMP';

TABLE_NAME                     TABLESPACE_NAME
------------------------------ ------------------------------
EMP                            ENC_TS 






SQL> select * from user_ind_columns where table_name='EMP';

INDEX_NAME      TABLE_NAME COLUMN_NAM COLUMN_POSITION COLUMN_LENGTH CHAR_LENGTH
--------------- ---------- ---------- --------------- ------------- -----------
EMPNO_IDX       EMP        EMPNO                    1            22           0





select count(*) from emp 
where empno = '7499';

=> INDEX - RANGE SCAN 




select count(*) from emp 
where empno > '7499';

=> INDEX - RANGE SCAN 







## tablespace Encryption 관련 딕셔너리
- DBA_TABLESPACES
- USER_TABLESPACES
- v$encrypted_tablespaces



https://otsteam.tistory.com/90



반응형