문서유형ㅣ기술정보
분야ㅣ관리/환경설정
적용제품버전ㅣ7FS02
문서번호ㅣTADTI167
개요
컬럼 암호화와 테이블스페이스 암호화 확인 시의 차이점을 설명합니다.
방법
컬럼 암호화 방식
컬럼 암호화는 암호화 처리 시 워커 쓰레드가 이를 담당합니다.
워커 쓰레드는 데이터를 암호화한 후 TSM의 버퍼 캐시(Buffer Cache) 상의 데이터 블록에 기록합니다. 따라서 블록 덤프 수행 시 다음과 같이 문자열이 암호화된 상태의 데이터가 확인됩니다.
테이블 생성 및 블록 덤프
SQL> CREATE TABLE TIBERO.T2 (c1 number, c2 char(2000));
SQL> insert into tibero.t2 values(111,'A');
SQL> insert into tibero.t2 values(222,'B');
SQL> insert into tibero.t2 values(333,'C');
SQL> insert into tibero.t2 values(444,'D');
SQL> insert into tibero.t2 values(555,'E');
SQL> insert into tibero.t2 values(666,'F');
--데이터 조회
SQL> select C1, SUBSTR(C2,1,1) from tibero.t2;
C1 SUBSTR(C2,1,1)
---------- --------------
111 A
222 B
333 C
444 D
555 E
666 F
6 rows selected.
--파일 및 블록의 번호 조회
SQL> select C1,
rowid,
dbms_rowid.rowid_block_number(rowid) as blkno, dbms_rowid.rowid_to_relative_fno(rowid) as fno2
from tibero.t2;
C1 ROWID BLKNO FNO2
---------- ------------------------------------------------------------------------ ---------- ----------
111 AAABA6AACAAAAE/AAA 319 2
222 AAABA6AACAAAAE/AAB 319 2
333 AAABA6AACAAAAE/AAC 319 2
444 AAABA6AACAAAAFAAAA 320 2
555 AAABA6AACAAAAFAAAB 320 2
666 AAABA6AACAAAAFAAAC 320 2
6 rows selected.
--블록 덤프 실행(위에서 조회된 2 개의 블록을 대상으로 함)
SQL> alter system dump datafile 2 block 319;
System altered.
컬럼 암호화 수행 후 위와 동일한 블록에 대한 덤프 실행
--컬럼 암호화
SQL> ALTER TABLE TIBERO.T2 MODIFY (C2 ENCRYPT NO SALT);
Table 'TIBERO.T2' altered.
--블록 덤프 실행(위에서 조회된 2 개의 블록을 대상으로 함)
SQL> alter system dump datafile 2 block 319;
System altered.
버퍼캐시 데이터 블록 내용(컬럼 암호화 전/후)
블록 덤프(ALTER SYSTEM DUMP ~) 수행 시, 다음과 같이 암호화되지 않은 상태의 데이터와 암호화된 상태의 데이터를 모두 확인할 수 있습니다.
**Dump start at 2025-12-16 16:12:16
DUMP of BLOCK file #2 block #14876
**Dump start at 2025-12-16 16:12:34
DUMP of BLOCK file #2 block #319
**Dump start at 2025-12-16 16:12:34
data block Dump[dba=02_00000319(8388927),tsn=0000.000147ec,type=13,seqno =1, flag=16]
--------------------------------------------------------------
sgmt_id=4154 cleanout_tsn=0000.000147ec btxcnt=2
l1dba=02_00000311(8388919), offset_in_l1=8
btx xid undo fl tsn/credit
00 0001.30.0019 01_00021906.00018.00050 E 0000.000147eb
01 0000.00.0000 00_00000000.00000.00000 I 0000.00000000
--------------------------------------------------------------
Data block dump:
dlhdr_size=14 freespace=2060 freepos=2158 symtab_offset=0 rowcnt=3
Row piece dump:
rp 0 6178: [2010] flag=--H-FL-- itlidx=0 colcnt=2
col 0: [4]
0000: 03 C2 81 8B ....
col 1: [2003]
0000: FE 07 D0 41 20 20 20 20 20 20 20 20 20 20 20 20 ...A
0010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
~ ~ 중략 ~ ~
**Dump start at 2017-12-18 19:10:40 DUMP of BLOCK file #2 block #14876
**Dump start at 2025-12-16 16:19:25
DUMP of BLOCK file #2 block #319
**Dump start at 2025-12-16 16:19:25
data block Dump[dba=02_00000319(8388927),tsn=0000.0001498f,type=13,seqno =1, flag=16]
--------------------------------------------------------------
sgmt_id=4154 cleanout_tsn=0000.0001498f btxcnt=2
l1dba=02_00000311(8388919), offset_in_l1=8
btx xid undo fl tsn/credit
00 0001.30.0019 01_00021906.00018.00050 E 0000.000147eb
01 0004.03.0020 01_00003746.00001.00002 E 0000.0001498d
--------------------------------------------------------------
Data block dump:
dlhdr_size=14 freespace=1952 freepos=2050 symtab_offset=0 rowcnt=3
Row piece dump:
rp 0 6142: [2046] flag=--H-FL-- itlidx=1 colcnt=2
col 0: [4]
0000: 03 C2 81 8B ....
col 1: [2039]
0000: FE 07 F4 7E B4 A9 53 C7 1C D3 77 53 ED 24 CC A2 ...~..S...wS.$..
0010: E6 59 8B 1C DA 59 EC 57 DA 51 1E 86 19 14 B8 96 .Y...Y.W.Q......
0020: D8 19 14 A0 78 EA 19 74 88 C4 B0 C6 9F 67 69 6D ....x..t.....gim
~ ~ 중략 ~ ~
테이블스페이스 암호화 방식
쓰기
워커 쓰레드는 암호화되지 않은 상태의 데이터를 TSM(Tibero Shared Memory)의 버퍼 캐시에 저장하며, 이후 DBWR 프로세스가 해당 데이터를 암호화하여 데이터 파일에 기록합니다.
읽기
데이터는 버퍼 캐시에 이미 복호화된 상태로 존재하므로, 블록이 버퍼 캐시에서 바로 읽히는 경우에는 별도의 복호화 처리가 필요하지 않습니다.
버퍼 캐시에 읽고자 하는 블록이 존재하지 않는 경우, 워커 쓰레드가 데이터 블록을 디스크에서 버퍼 캐시로 읽어오는 과정에서 복호화를 수행한 후 버퍼 캐시에 저장합니다.
따라서 블록 덤프(ALTER SYSTEM DUMP ~) 수행 시, 다음과 같이 암호화되지 않은 상태의 데이터를 확인할 수 있습니다.
--일반 컬럼으로 변경
SQL> ALTER TABLE TIBERO.T2 MODIFY (C2 DECRYPT);
--암호화 테이블스페이스 생성
SQL> CREATE TABLESPACE ENC_USR DATAFILE '/tibero/examples/tbdata/tibero/enc_usr01.dtf' size 50m ENCRYPTION USING 'AES256' DEFAULT STORAGE (ENCRYPT);
--테이블을 암호화 테이블스페이스로 이동
SQL> ALTER TABLE TIBERO.T2 MOVE TABLESPACE ENC_USR;
--파일 및 블록의 번호 조회
SQL> select C1,
rowid,
dbms_rowid.rowid_block_number(rowid) as blkno, dbms_rowid.rowid_to_relative_fno(rowid) as fno2
from tibero.t2;
C1 ROWID BLKNO FNO2
---------- ------------------------------------------------------------------------ ---------- ----------
111 AAABA9AAEAAAAAKAAA 10 4
222 AAABA9AAEAAAAAKAAB 10 4
333 AAABA9AAEAAAAAKAAC 10 4
444 AAABA9AAEAAAAALAAA 11 4
555 AAABA9AAEAAAAALAAB 11 4
666 AAABA9AAEAAAAALAAC 11 4
6 rows selected.
--블록 덤프 실행(위에서 조회된 2 개의 블록을 대상으로 함)
SQL> alter system dump datafile 4 block 10;
System altered.**Dump start at 2025-12-16 16:28:47
DUMP of BLOCK file #4 block #10
**Dump start at 2025-12-16 16:28:47
data block Dump[dba=04_00000010(16777226),tsn=0000.00014a59,type=13,seqno =1, flag=1]
--------------------------------------------------------------
sgmt_id=4157 cleanout_tsn=0000.00000000 btxcnt=2
l1dba=04_00000007(16777223), offset_in_l1=3
btx xid undo fl tsn/credit
00 0000.00.0000 00_00000000.00000.00000 I 0000.00000000
01 0000.00.0000 00_00000000.00000.00000 I 0000.00000000
--------------------------------------------------------------
Data block dump:
dlhdr_size=14 freespace=2060 freepos=2158 symtab_offset=0 rowcnt=3
Row piece dump:
rp 0 6178: [2010] flag=--H-FL-- itlidx=255 colcnt=2
col 0: [4]
0000: 03 C2 81 8B ....
col 1: [2003]
0000: FE 07 D0 41 20 20 20 20 20 20 20 20 20 20 20 20 ...A
0010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
~ ~ 중략 ~ ~