기타지식 Tibero 암호화가이드 2014. 07. 28.
목차 1. 보안지갑 Wallet)... 3 2. Data 암호화... 6 2.1. 컬럼암호화 Column Encryption)... 6 2.2. 테이블스페이스암호화 Tablespace Encryption)... 9 3. 암호화 Package... 11 3.1. DBMS_CRYPTO Package... 11 3.1.1. ENCRYPT... 11 3.1.2. DECRYPT... 12 3.1.3. HASH... 12 3.2. DBMS_OBFUSCATION_TOOLKIT Package... 18 3.2.1. DES3ENCRYPT... 18 3.2.2. DES3DECRYPT... 19 3.2.3. DES3GETKEY... 21 3.2.4. DESENCRYPT... 23 3.2.5. DESDECRYPT... 24 3.2.6. DESGETKEY... 26 4. Utility 접속정보암호화... 27 4.1. tbsql... 28 4.2. tbloader... 29 4.3. tbexport / tbimport... 31 5. 주의사항... 34 5.1. 패치시주의사항... 34 5.2. Windows 사용불가... 35 5.3. 패스워드변경시 Wallet 재생성... 35 6. 기타... 35 2
Tibero 암호화가이드 Tibero 에서는 Data 보안을위해 Tibero 는 Data를암호화하여디스크에저장하는기능을제공하고있다. DBA가암호화할 Data 테이블의컬럼또는테이블스페이스 ) 를지정하면 Tibero 는 Data를저장할때내부적으로암호화하여저장하고검색할때복호화해서보여준다. 이때사용자나애플리케이션프로그램은 Data의암호화여부를고려할필요가없다. 1. 보안지갑 Wallet) Data 암호화기능을사용하기위해서우선보안지갑을생성해야한다. 보안지갑은암호화에사용할마스터키를보 관하고있다. Tibero 는마스터키를이용하여각 Data 를암호화할암호화키를생성하고이암호화키를이용하여 Data 를암호화한다. Tibero 에서제공하는암호화알고리즘및 HASH 알고리즘 암호화 알고리즘 구분 HASH 알고리즘 컬럼 암호화 테이블스페이스 암호화 DBMS_CRYPTO Package 암호화 Package DBMS_OBFUSCATION_TOOLKIT Package AES128 지원 지원 지원 - AES192 지원 지원 지원 - AES256 지원 지원 지원 - SEED - - - - DES 지원 - 지원 지원 3DES168 지원 지원 지원 지원 ARIA128 - - 지원 - ARIA192 - - 지원 - ARIA256 - - 지원 - MD4 - - 지원 - SHA-1 - - 지원 - MD5 - - 지원 지원 ARIA알고리즘은 ARIA128, ARIA192, ARIA256) 은 Tibero 5 SP1에서부터지원 3
암호화키관리를위한보안지갑설정방법 방법 내용 데이터베이스에키를 저장하는방법 - 특정테이블의컬럼에키를 저장하는방법 운영체제파일에저장 하는방법 - 키를파일에저장 사용자가키를직접 입력하는방법 - 사용자가키를입력하거나 어플리케이션내에저장된키를 젂송하여암호화 / 복호화수행 보안지갑설정 -- 보안지갑생성 $ tbwallet_gen [ Tibero Security Wallet Generator ] Enter wallet file name: TBWALLET Enter wallet password: tibero generate wallet success -- 수행한위치에보안지갑생성확인 $ ls -lt -rw-r--r-- 1 tibero5 dba 177 Jul 29 09:33 TBWALLET -- 생성한 Wallet file 경로설정 #-------------------------------------------------------------------------- # # RDBMS initialization parameter # #-------------------------------------------------------------------------- 4
DB_NAME=tibero LISTENER_PORT=8629 CONTROL_FILES="/home/tibero5/database/tibero5/c1.ctl" #CERTIFICATE_FILE="/home/tibero5/config/svr_wallet/tb5.crt" #PRIVKEY_FILE="/home/tibero5/config/svr_wallet/tb5.key" WALLET_FILE="/home/tibero5/TBWALLET" MAX_SESSION_COUNT=20 TOTAL_SHM_SIZE=512M MEMORY_TARGET=1G _USGMT_UNIFORM_EXTSIZE=1024 #-------------------------------------------------------------------------- -- DB 재기동 $ tbdown $ tbboot -- 보안지갑사용 $ tbsql sys/tibero SQL> alter system set encryption wallet open identified by "tibero"; System altered. -- 보안지갑닫기 SQL> alter system set encryption wallet close; System altered. 5
2. Data 암호화 2.1. 컬럼암호화 Column Encryption) - 컬럼암호화는어플리케이션수정없이테이블의특정컬럼의 Data를암호화하여저장하는기능 - 컬럼암호화알고리즘 : DES, 3DES168, AES128, AES192, AES256 - 암호화가능한컬럼의 Data 타입 : CHAR, VARCHAR2, NUMBER, DATE, TIMESTAMP, INTERVAL DAY TO SECOND, INTERVAL YEAR TO MONTH, RAW, NCHAR, NVARCHAR2 - Data backup 시암호화된 Data로저장됨 문법 1) CREATE TABLE TABLE 명 ~~ 컬럼명 ENCRYPT [USING ' 암호화알고리즘명 '] [NO SALT SALT] 2) USING 뒤에암호화알고리즘을작은따옴표와적는방식으로지정, 지정하지않으면기본값은 AES192 3) SALT NO SALT - 보안을강화하는 SALT 기능을사용할지여부를지정, 지정하지않으면기본값은 SALT - SALT 기능은컬럼값이같더라도암호화후의값을다르게생성하여보안을강화 - SALT 기능은같은값을매번다르게암호화하므로해당컬럼에인덱스를생성할수없음 제약사항 - 한테이블에암호화컬럼은여러개지정가능하지맊, 한테이블에는하나의암호화알고리즘만사용가능 - SALT 옵션을사용한암호화컬럼은인덱스생성할수없음 컬럼암호화 1 암호화되지않은 Data 입력 2 Master Key와 Column Key를통한컬럼 Data 암호화 3 암호화된 Data 저장 4 복호화시 Master Key를획득하여 Column Key로해독한 Data 반홖 6
암호화컬럼이있는 Table 생성 -- Sample DATA 생성 SQL> CREATE TABLE TDE_TABLE ID NUMBER, NAME VARCHAR20) ENCRYPT, DAY DATE ENCRYPT ); Table 'TDE_TABLE' created. SQL> insert into TDE_TABLE values 1, 'TIBERO', '2003/05/30'); 1 row inserted. SQL> insert into TDE_TABLE values 2, 'TMAXDATA', '2014/06/02' ); 1 row inserted. SQL> commit; Commit completed. -- 암호화컬럼확인 SQL> select * from USER_ENCRYPTED_COLUMNS where table_name ='TDE_TABLE'; TABLE_NAME COLUMN_NAME ENCRYPTION_ALG SALT ---------- ------------------------ ----------------------------- ---- TDE_TABLE NAME AES 192 bits key YES TDE_TABLE DAY AES 192 bits key YES 2 rows selected. 컬럼암호화예제 -- 암호화되지않는기존컬럼암호화 SQL> alter table TDE_TABLE modify ID ENCRYPT); Table 'TDE_TABLE' altered. SQL> select * from USER_ENCRYPTED_COLUMNS where table_name ='TDE_TABLE'; TABLE_NAME COLUMN_NAME ENCRYPTION_ALG SALT ---------- ------------------------ ----------------------------- ---- TDE_TABLE ID AES 192 bits key YES TDE_TABLE NAME AES 192 bits key YES TDE_TABLE DAY AES 192 bits key YES 3 rows selected. 7
-- 암호화기능비홗성화 SQL> alter table TDE_TABLE modify name DECRYPT ); Table 'TDE_TABLE' altered. SQL> select * from USER_ENCRYPTED_COLUMNS where table_name ='TDE_TABLE'; TABLE_NAME COLUMN_NAME ENCRYPTION_ALG SALT ---------- ------------------------ ----------------------------- ---- TDE_TABLE ID AES 192 bits key YES TDE_TABLE DAY AES 192 bits key YES 2 rows selected. -- 기존테이블에암호화된컬럼추가 SQL> alter table TDE_TABLE add PHONE number ENCRYPT no salt ); Table 'TDE_TABLE' altered. SQL> select * from USER_ENCRYPTED_COLUMNS where table_name ='TDE_TABLE'; TABLE_NAME COLUMN_NAME ENCRYPTION_ALG SALT ---------- ------------------------ ----------------------------- ---- TDE_TABLE ID AES 192 bits key YES TDE_TABLE PHONE AES 192 bits key NO TDE_TABLE DAY AES 192 bits key YES 3 rows selected. -- Index 생성에대한 salt/no salt 변경 SQL> alter table TDE_TABLE modify ID ENCRYPT no salt); Table 'TDE_TABLE' altered. SQL> select * from USER_ENCRYPTED_COLUMNS where table_name ='TDE_TABLE'; TABLE_NAME COLUMN_NAME ENCRYPTION_ALG SALT ---------- ------------------------ ----------------------------- ---- TDE_TABLE ID AES 192 bits key NO TDE_TABLE PHONE AES 192 bits key NO TDE_TABLE DAY AES 192 bits key YES 3 rows selected. -- 암호화알고리즘변경 SQL> ALTER TABLE TDE_TABLE REKEY using '3DES168'; Table 'TDE_TABLE' altered. 8
SQL> select * from USER_ENCRYPTED_COLUMNS where table_name ='TDE_TABLE'; TABLE_NAME COLUMN_NAME ENCRYPTION_ALG SALT ---------- ------------------------ ----------------------------- ---- TDE_TABLE ID 3 Key Triple DES 168 bits key NO TDE_TABLE PHONE 3 Key Triple DES 168 bits key NO TDE_TABLE DAY 3 Key Triple DES 168 bits key YES 3 rows selected. 2.2. 테이블스페이스암호화 Tablespace Encryption) - 테이블스페이스암호화는어플리케이션수정없이테이블스페이스젂체에대해암호화를지정 - 테이블스페이스암호화알고리즘 : 3DES168, AES128, AES192, AES256 - Data backup 시암호화된 Data 로저장됨 문법 - CREATE TABLESPACE TABLESPACE 명 ~~ ENCRYPTION USING ' 암호화알고리즘명 ' DEFAULT STORAGE ENCRYPT); - USING 뒤에암호화알고리즘을작은따옴표와적는방식으로지정, 지정하지않으면기본값은 AES192 제약사항 - 테이블스페이스암호화를사용하려면테이블스페이스생성시암호화를적용 - SYSTEM, UNDO, TEMP 테이블스페이스는암호화지정불가능 테이블스페이스암호화 1 암호화되지않은 Data 입력 2 Master Key와 Column Key를통한테이블스페이스암호화 3 암호화된 Data 저장 4 복호화시 Master Key를획득하여 Tablespace Key로해독한 Data 반홖 9
암호화테이블스페이스생성 -- Tablespace 생성 SQL> CREATE TABLESPACE ENC_TBS DATAFILE 'encd001.dtf' SIZE 50M AUTOEXTEND ON NEXT 1M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 256K ENCRYPTION USING '3DES168' DEFAULT STORAGE ENCRYPT); Tablespace 'ENC_TBS' created. -- Table Sample 생성 SQL> CREATE TABLE TDE_TABLE ID NUMBER, NAME VARCHAR20), DAY DATE )TABLESPACE ENC_TBS; Table 'TDE_TABLE' created. SQL> insert into TDE_TABLE values1, 'TIBERO', '2003/05/30'); 1 row inserted. SQL> insert into TDE_TABLE values2, 'TMAXDATA', '2014/06/02'); 1 row inserted. SQL> commit; Commit completed. -- Tablespace 알고리즘및상태확인 SQL> select ts.ts_id,ts.tablespace_name, en.encryptionalg, en.encryptedts from sys.v$encrypted_tablespaces en, dba_tablespaces ts where en.ts# = ts.ts_id; TS_ID TABLESPACE_NAME ENCRYPTIONALG ENCRYPTEDTS ---------- ---------------------- ------------- ----------- 6 ENC_TBS 3DES168 YES 1 row selected. -- Wallet 이 open 된경우 SQL> select * from TDE_TABLE; ID NAME DAY ---------- -------------------- -------------------------------- 1 TIBERO 2003/05/30 2 TMAXDATA 2014/06/02 2 rows selected. 10
-- Wallet 이 close 된경우 SQL> ALTER SYSTEM SET ENCRYPTION WALLET CLOSE; System altered. SQL> select * from TDE_TABLE; TBR-12073: Wallet is not open. 3. 암호화 Package 3.1. DBMS_CRYPTO Package - Data 암복호화및인증등에쓰이는해시알고리즘을제공하는 Package - 이 Package 의암복호화알고리즘들은모두키를사용 - DBMS_OBFUSCATION_TOOLKIT 보다맋은종류의알고리즘을사용하므로, 이 Package 를사용을권장 - 지원알고리즘 : DES, 3DES, AES, RC4, ARIA, SMS4 3.1.1. ENCRYPT - 사용자가명시한암호화알고리즘및체인, 패딩기법을이용하여 Data 를암호화하는 Function - 반홖값 : 복호화된 Data Prototype DBMS_CRYPTO.ENCRYPT src IN RAW, cipher_type IN PLS_INTEGER, key IN RAW, init_vector IN RAW DEFAULT NULL) RETURN RAW 파라미터 설명 src cipher_type key init_vector 암호화할 Data 사용할암호화알고리즘, 체인, 패딩기법암호화하기위해주어짂키값초기화벡터이다. NULL 이면 0 으로채워짂초기화벡터를사용 예외상황 INVALID_ARGUMENT INVALID_NTH_ARGUMENT 파라미터중하나라도 NULL 인경우 cipher_type 값이잘못설정된경우 설명 11
INVALID_INPUT KEY_TOO_SHORT ZERO 패딩방식일때 input_data 의길이가블록크기의배수가아닌경우 키값의길이가필요한크기보다작은경우 3.1.2. DECRYPT - 사용자가명시한암호화알고리즘및체인, 패딩기법을이용하여암호화된 Data 를복호화하는 Function - 반홖값 : 복호화된 Data Prototype DBMS_CRYPTO.DECRYPT src IN RAW, cipher_type IN PLS_INTEGER, key IN RAW, init_vector IN RAW DEFAULT NULL) RETURN RAW 파라미터 설명 src cipher_type key init_vector 복호화할 Data 사용할암호화알고리즘, 체인, 패딩기법복호화하기위해주어짂키값초기화벡터이다. NULL 이면 0 으로채워짂초기화벡터를사용 예외상황 INVALID_ARGUMENT INVALID_NTH_ARGUMENT INVALID_INPUT KEY_TOO_SHORT 설명파라미터중하나라도 NULL 인경우 cipher_type 값이잘못설정된경우 input_data 의길이가 8 의배수가아닌경우키값의길이가필요한크기보다작은경우 3.1.3. HASH - 사용자가명시한알고리즘을이용하여임의의길이의 Data 를고정길이의해시값으로변홖하는 Function Prototype DBMS_CRYPTO.HASH src IN RAW, hash_type IN PLS_INTEGER) RETURN RAW 12
파라미터 설명 src hash_type 원본 Data 사용할해시알고리즘 예외상황 설명 INVALID_ARGUMENT INVALID_NTH_ARGUMENT 파라미터중하나라도 NULL 인경우 hash_type 값이잘못설정된경우 DES 알고리즘예제 SQL> SET SERVEROUTPUT ON SQL> DECLARE key RAW128); data varchar30); data_raw RAW256); encrypted_data_des RAW256); decrypted_data_des RAW256); iv RAW256); BEGIN key := UTL_RAW.cast_to_raw'MyEncryptionKey123MyEncryptionKey123'); iv := '00000000000000000000000000000000'; data := 'Hello Tibero!'; data_raw := UTL_RAW.CAST_TO_RAW data); dbms_output.put_line'========== DES ENCRYPT/DECRYPT =========='); dbms_output.put_line'source Data : ' data); dbms_output.put_line'source RAW : ' data_raw); /* ENCRYPT */ encrypted_data_des := DBMS_CRYPTO.ENCRYPT src => data_raw, cipher_type => DBMS_CRYPTO.ENCRYPT_DES + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5, key => key, init_vector => iv); dbms_output.put_line'encrypted Data : ' encrypted_data_des); /* DECRYPT */ decrypted_data_des := DBMS_CRYPTO.DECRYPT src => encrypted_data_des, cipher_type => DBMS_CRYPTO.ENCRYPT_DES + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5, key => key, init_vector => iv); dbms_output.put_line'decrypted Data : ' decrypted_data_des); dbms_output.put_line'--- Result---- : ' UTL_RAW.CAST_TO_VARCHAR2decrypted_data_des)); END; / PSM completed. 13
-- 결과값 ========== DES ENCRYPT/ DECRYPT ========== Source Data : Hello Tibero! Source RAW : 48656C6C6F2054696265726F21 Encrypted Data : 751E5BE7EE419FACCF008E124225755D Decrypted Data : 48656C6C6F2054696265726F21 --- Result---- : Hello Tibero! 3DES 알고리즘예제 SQL> set serveroutput on SQL> DECLARE key RAW128); data varchar30); data_raw RAW256); encrypted_data_3des RAW256); decrypted_data_3des RAW256); iv RAW256); BEGIN key := UTL_RAW.cast_to_raw'MyEncryptionKey123MyEncryptionKey123'); iv := '00000000000000000000000000000000'; data := 'Hello Tibero!'; data_raw := UTL_RAW.CAST_TO_RAW data); dbms_output.put_line'========== 3DES ENCRYPT/ DECRYPT =========='); dbms_output.put_line'source Data : ' data); dbms_output.put_line'source RAW : ' data_raw); /* ENCRYPT */ encrypted_data_3des := DBMS_CRYPTO.ENCRYPT src => data_raw, cipher_type => DBMS_CRYPTO.ENCRYPT_3DES + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5, key => key, init_vector => iv); dbms_output.put_line'encrypted Data : ' encrypted_data_3des); /* DECRYPT */ decrypted_data_3des := DBMS_CRYPTO.DECRYPT src => encrypted_data_3des, cipher_type => DBMS_CRYPTO.ENCRYPT_3DES + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5, key => key, init_vector => iv); dbms_output.put_line'decrypted Data : ' decrypted_data_3des); dbms_output.put_line'--- Result---- : ' UTL_RAW.CAST_TO_VARCHAR2 decrypted_data_3des)); END; / PSM completed. -- 결과값 ========== 3DES ENCRYPT/ DECRYPT ========== Source Data : Hello Tibero! Source RAW : 48656C6C6F2054696265726F21 Encrypted Data : 7851CF1AE54C26FCC03750FC32C45846 Decrypted Data : 48656C6C6F2054696265726F21 --- Result---- : Hello Tibero! 14
AES128 알고리즘예제 SQL> set serveroutput on SQL> DECLARE key RAW128); data varchar30); data_raw RAW256); encrypted_data_aes RAW256); decrypted_data_aes RAW256); iv RAW256); BEGIN key := UTL_RAW.cast_to_raw'MyEncryptionKey123MyEncryptionKey123'); iv := '00000000000000000000000000000000'; data := 'Hello Tibero!'; data_raw := UTL_RAW.CAST_TO_RAW data); dbms_output.put_line'========== AES128 ENCRYPT/ DECRYPT =========='); dbms_output.put_line'source Data : ' data); dbms_output.put_line'source RAW : ' data_raw); /* ENCRYPT */ encrypted_data_aes := DBMS_CRYPTO.ENCRYPT src => data_raw, cipher_type => DBMS_CRYPTO.ENCRYPT_AES128 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5, key => key, init_vector => iv); dbms_output.put_line'encrypted Data : ' encrypted_data_aes); /* DECRYPT */ decrypted_data_aes := DBMS_CRYPTO.DECRYPT src => encrypted_data_aes, cipher_type => DBMS_CRYPTO.ENCRYPT_AES128 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5, key => key, init_vector => iv); dbms_output.put_line'decrypted Data : ' decrypted_data_aes); dbms_output.put_line'--- Result---- : ' UTL_RAW.CAST_TO_VARCHAR2 decrypted_data_aes)); END; / PSM completed. -- 결과값 ========== AES128 ENCRYPT/ DECRYPT ========== Source Data : Hello Tibero! Source RAW : 48656C6C6F2054696265726F21 Encrypted Data : 768D4A41AC3E028DD35032A00EDEEDEB Decrypted Data : 48656C6C6F2054696265726F21 --- Result---- : Hello Tibero! AES256 알고리즘예제 SQL> set serveroutput on SQL> DECLARE key RAW128); data varchar30); 15
data_raw RAW256); encrypted_data_aes256 RAW256); decrypted_data_aes256 RAW256); iv RAW256); BEGIN key := UTL_RAW.cast_to_raw'MyEncryptionKey123MyEncryptionKey123'); iv := '00000000000000000000000000000000'; data := 'Hello Tibero!'; data_raw := UTL_RAW.CAST_TO_RAW data); dbms_output.put_line'========== AES256 ENCRYPT/ DECRYPT =========='); dbms_output.put_line'source Data : ' data); dbms_output.put_line'source RAW : ' data_raw); /* ENCRYPT */ encrypted_data_aes256 := DBMS_CRYPTO.ENCRYPT src => data_raw, cipher_type => DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5, key => key, init_vector => iv); dbms_output.put_line'encrypted Data : ' encrypted_data_aes256); /* DECRYPT */ decrypted_data_aes256 := DBMS_CRYPTO.DECRYPT src => encrypted_data_aes256, cipher_type => DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5, key => key, init_vector => iv); dbms_output.put_line'decrypted Data : ' decrypted_data_aes256); dbms_output.put_line'--- Result---- : ' UTL_RAW.CAST_TO_VARCHAR2 decrypted_data_aes256)); END; / PSM completed. -- 결과값 ========== AES256 ENCRYPT/ DECRYPT ========== Source Data : Hello Tibero! Source RAW : 48656C6C6F2054696265726F21 Encrypted Data : C8CBE69FF59DD2A4C4BDEC3412D4350E Decrypted Data : 48656C6C6F2054696265726F21 --- Result---- : Hello Tibero! ARIA128 알고리즘예제 SQL> set serveroutput on SQL> DECLARE key RAW128); data varchar30); data_raw RAW256); encrypted_data_aria RAW256); decrypted_data_aria RAW256); iv RAW256); 16
BEGIN key := UTL_RAW.cast_to_raw'MyEncryptionKey123MyEncryptionKey123'); iv := '00000000000000000000000000000000'; data := 'Hello Tibero!'; data_raw := UTL_RAW.CAST_TO_RAW data); dbms_output.put_line'========== ARIA128 ENCRYPT/ DECRYPT =========='); dbms_output.put_line'source Data : ' data); dbms_output.put_line'source RAW : ' data_raw); /* ENCRYPT */ encrypted_data_aria := DBMS_CRYPTO.ENCRYPT src => data_raw, cipher_type => DBMS_CRYPTO.ENCRYPT_ARIA128 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5, key => key, init_vector => iv); dbms_output.put_line'encrypted Data : ' encrypted_data_aria); /* DECRYPT */ decrypted_data_aria := DBMS_CRYPTO.DECRYPT src => encrypted_data_aria, cipher_type => DBMS_CRYPTO.ENCRYPT_ARIA128 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5, key => key, init_vector => iv); dbms_output.put_line'decrypted Data : ' decrypted_data_aria); dbms_output.put_line'--- Result---- : ' UTL_RAW.CAST_TO_VARCHAR2 decrypted_data_aria)); END; / PSM completed. -- 결과값 ========== ARIA128 ENCRYPT/ DECRYPT ========== Source Data : Hello Tibero! Source RAW : 48656C6C6F2054696265726F21 Encrypted Data : FE0D52AA6B5A5A066D7CB0AED84E9E4C Decrypted Data : 48656C6C6F2054696265726F21 --- Result---- : Hello Tibero! ARIA256 알고리즘예제 SQL> set serveroutput on SQL> DECLARE key RAW128); data varchar30); data_raw RAW256); encrypted_data_aria256 RAW256); decrypted_data_aria256 RAW256); iv RAW256); BEGIN key := UTL_RAW.cast_to_raw'MyEncryptionKey123MyEncryptionKey123'); iv := '00000000000000000000000000000000'; data := 'Hello Tibero!'; data_raw := UTL_RAW.CAST_TO_RAW data); dbms_output.put_line'========== ARIA128 ENCRYPT/ DECRYPT =========='); 17
dbms_output.put_line'source Data dbms_output.put_line'source RAW : ' data); : ' data_raw); /* ENCRYPT */ encrypted_data_aria256 := DBMS_CRYPTO.ENCRYPT src => data_raw, cipher_type => DBMS_CRYPTO.ENCRYPT_ARIA256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5, key => key, init_vector => iv); dbms_output.put_line'encrypted Data : ' encrypted_data_aria256); /* DECRYPT */ decrypted_data_aria256 := DBMS_CRYPTO.DECRYPT src => encrypted_data_aria256, cipher_type => DBMS_CRYPTO.ENCRYPT_ARIA256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5, key => key, init_vector => iv); dbms_output.put_line'decrypted Data : ' decrypted_data_aria256); dbms_output.put_line'--- Result---- : ' UTL_RAW.CAST_TO_VARCHAR2 decrypted_data_aria256)); END; / PSM completed. -- 결과값 ========== ARIA128 ENCRYPT/ DECRYPT ========== Source Data : Hello Tibero! Source RAW : 48656C6C6F2054696265726F21 Encrypted Data : 485683A620594895C65C2DCFBCC53BD7 Decrypted Data : 48656C6C6F2054696265726F21 --- Result---- : Hello Tibero! 3.2. DBMS_OBFUSCATION_TOOLKIT Package - Data 를암호화 encryption) 하고복호화 decryption) 하는 Package - 지원알고리즘 : DES, 3DES 3.2.1. DES3ENCRYPT - 3DES 알고리즘을이용하여 Data 를암호화하는 Procedure 와 Function <Prototype> Procedure DBMS_OBFUSCATION_TOOLKIT.DES3ENCRYPT input IN RAW, key IN RAW, encrypted_data OUT RAW, which IN PLS_INTEGER DEFAULT 0, iv IN RAW DEFAULT NULL ); 18
DBMS_OBFUSCATION_TOOLKIT.DES3ENCRYPT input_string IN VARCHAR2, key_string IN VARCHAR2, encrypted_string OUT VARCHAR2, which IN PLS_INTEGER DEFAULT 0, iv_string IN VARCHAR2 DEFAULT NULL ); Function DBMS_OBFUSCATION_TOOLKIT.DES3ENCRYPT input IN RAW, key IN RAW, which IN PLS_INTEGER DEFAULT 0, iv IN RAW DEFAULT NULL ) RETURN RAW; DBMS_OBFUSCATION_TOOLKIT.DES3ENCRYPT input_string IN VARCHAR2, key_string IN VARCHAR2, which IN PLS_INTEGER DEFAULT 0, iv_string IN VARCHAR2 DEFAULT NULL ) RETURN VARCHAR2; 파라미터 설명 input, input_string key encrypted_data which 암호화할 Data 암호화하기위해주어짂키값암호화된결과 Data - 0 이면 DES 복호화를 2 번수행 iv 초기화벡터이다. - 1 이면 DES 복호화를 3 번수행 예외상황 설명 INVALID_ARGUMENT INVALID_INPUT KEY_TOO_SHORT INVALID_DES_MODE 파라미터중하나라도 NULL인경우 input_data의길이가 8의배수가아닌경우키값의길이가 8보다작은경우 which 값이 0 또는 1이아닌경우 3.2.2. DES3DECRYPT 19
- 사용자가 3DES 알고리즘을이용하여암호화된 Data 를복호화하는 Procedure 와 Function < Prototype > Procedure DBMS_OBFUSCATION_TOOLKIT.DES3DECRYPT input IN RAW, key IN RAW, decrypted_data OUT RAW, which IN PLS_INTEGER DEFAULT 0, iv IN RAW DEFAULT NULL ); DBMS_OBFUSCATION_TOOLKIT.DES3DECRYPT input_string IN VARCHAR2, key_string IN VARCHAR2, decrypted_string OUT VARCHAR2, which IN PLS_INTEGER DEFAULT 0, iv_string IN VARCHAR2 DEFAULT NULL ); Function DBMS_OBFUSCATION_TOOLKIT.DES3DECRYPT input IN RAW, key IN RAW, which IN PLS_INTEGER DEFAULT 0, iv IN RAW DEFAULT NULL ) RETURN RAW; DBMS_OBFUSCATION_TOOLKIT.DES3DECRYPT input_string IN VARCHAR2, key_string IN VARCHAR2, which IN PLS_INTEGER DEFAULT 0, iv_string IN VARCHAR2 DEFAULT NULL ) RETURN VARCHAR2; 파라미터 설명 input, input_string key decrypted_data which 복호화할 Data 복호화하기위해주어짂키값복호화된결과 Data - 0 이면 DES 복호화를 2 번수행한다. iv 초기화벡터이다. - 1 이면 DES 복호화를 3 번수행한다. 20
예외상황 설명 INVALID_ARGUMENT INVALID_INPUT KEY_TOO_SHORT INVALID_DES_MODE 파라미터중하나라도 NULL인경우 input_data의길이가 8의배수가아닌경우키값의길이가 8보다작은경우 which 값이 0 또는 1이아닌경우 DES3ENCRYPT/DES3DECRYPT 예제 SQL> set serveroutput on SQL> DECLARE data RAW256); key RAW128); encrypted_data RAW256); decrypted_data RAW256); BEGIN key := UTL_RAW.cast_to_raw'MyEncryptionKey123MyEncryptionKey123'); data := UTL_RAW.CAST_TO_RAW 'Hello Tibero!!!!'); dbms_output.put_line'source data : ' data); /* ENCRYPT */ DBMS_OBFUSCATION_TOOLKIT.DES3Encryptinput => data, key => key, encrypted_data => encrypted_data); dbms_output.put_line'encrypted Data : ' encrypted_data); /* DECRYPT */ data := encrypted_data; DBMS_OBFUSCATION_TOOLKIT.DES3Decryptinput => data, key => key, decrypted_data => decrypted_data); dbms_output.put_line'decrypted Data : ' decrypted_data); dbms_output.put_line'result : ' UTL_RAW.CAST_TO_VARCHAR2 decrypted_data)); END; / PSM completed. -- 결과값 source data : 48656C6C6F2054696265726F21212121 Encrypted Data : 6E4855FBF618093A345186EA182F3A1C Decrypted Data : 48656C6C6F2054696265726F21212121 Result : Hello Tibero!!!! 3.2.3. DES3GETKEY - 임의의값을입력값으로받아 DES3 알고리즘을위한키를생성하는 Procedure 와 Function < Prototype > 21
Procedure DBMS_OBFUSCATION_TOOLKIT.DES3GETKEY which IN PLS_INTEGER DEFAULT 0, seed IN RAW, key OUT RAW ); DBMS_OBFUSCATION_TOOLKIT.DES3GETKEY which IN PLS_INTEGER DEFAULT 0, seed_string IN VARCHAR2, key OUT VARCHAR2 ); Function DBMS_OBFUSCATION_TOOLKIT.DES3GETKEY which IN PLS_INTEGER DEFAULT 0, seed IN RAW ) RETURN RAW; DBMS_OBFUSCATION_TOOLKIT.DES3GETKEY which IN PLS_INTEGER DEFAULT 0, seed_string IN VARCHAR2 ) RETURN VARCHAR2; 파라미터 설명 which - 0 이면 DES 복호화를 2 번수행 - 1 이면 DES 복호화를 3 번수행 seed 80 자이상의임의의값이다. key 암호화하기위해주어짂키값이다. 예외상황 설명 NO_SEED SEED_TOO_SHORT INVALID_INPUT INVALID_DES_MODE seed의값이 NULL인경우 seed의길이가 80보다작은경우 which가 NULL인경우 which의값이 0 또는 1이아닌경우 DES3GETKEY 이용한예제 SQL> CREATE OR REPLACE FUNCTION get_key_des3 RETURN raw 22
AS l_keyr raw255); l_seed varchar2255); l_seedr raw255); BEGIN l_seed := 'UpKYrZHeiooBqkvpJHuImXrLOmVzYhgBhJcNLQL' 'wkkyahkgozknxpdbjcgypgnfpyqobagmtrtjuhxao'; l_seedr := UTL_RAW.CAST_TO_RAWl_seed); DBMS_OBFUSCATION_TOOLKIT.DES3GETKEY -- 0 이면 2 번암호화, 1 이면 3 번암호화 1, seed => l_seedr, key => l_keyr ); RETURN l_keyr; END; / Function 'GET_KEY_DES3' created. SQL> VARIABLE created_key VARCHAR22000); SQL> EXEC :created_key := get_key_des3 PSM completed. SQL> PRINT created_key CREATED_KEY ------------------------------------------------------ BDD9580DD892F6F623ED59B740F54BA6D0E833B13805E4C3 3.2.4. DESENCRYPT - DES 알고리즘을이용하여 Data 를암호화하는 Procedure 와 Function < Prototype > Procedure DBMS_OBFUSCATION_TOOLKIT.DESENCRYPT input IN RAW, key IN RAW, encrypted_data OUT RAW ); DBMS_OBFUSCATION_TOOLKIT.DESENCRYPT input_string IN VARCHAR2, key_string IN VARCHAR2, encrypted_string OUT VARCHAR2 ); 23
Function DBMS_OBFUSCATION_TOOLKIT.DESENCRYPT input IN RAW, key IN RAW ) RETURN RAW; DBMS_OBFUSCATION_TOOLKIT.DESENCRYPT input_string IN VARCHAR2, key_string IN VARCHAR2 ) RETURN VARCHAR2; 파라미터 설명 input, input_string key encrypted_data 암호화할 Data 암호화하기위해주어짂키값 암호화된결과 Data 예외상황 설명 INVALID_ARGUMENT 파라미터중하나라도 NULL 인경우이다. INVALID_INPUT input_data 의길이가 8 의배수가아닌경우이다. KEY_TOO_SHORT 키값의길이가 8 보다작은경우이다. 3.2.5. DESDECRYPT - DES 알고리즘을이용하여암호화된 Data 를복호화하는 Procedure 와 Function < Prototype > Procedure DBMS_OBFUSCATION_TOOLKIT.DESDECRYPT input IN RAW, key IN RAW, decrypted_data OUT RAW ); DBMS_OBFUSCATION_TOOLKIT.DESDECRYPT input_string IN VARCHAR2, 24
); key_string IN VARCHAR2, decrypted_string OUT VARCHAR2 Function DBMS_OBFUSCATION_TOOLKIT.DESDECRYPT input IN RAW, key IN RAW ) RETURN RAW; DBMS_OBFUSCATION_TOOLKIT.DESDECRYPT input_string IN VARCHAR2, key_string IN VARCHAR2 ); RETURN VARCHAR2; 파라미터 설명 input, input_string key decrypted_data 복호화할 Data 복호화하기위해주어짂키값 복호화된결과 Data 예외상황 설명 INVALID_ARGUMENT INVALID_INPUT KEY_TOO_SHORT 파라미터중하나라도 NULL 인경우 input_data 의길이가 8 의배수가아닌경우 키값의길이가 8 보다작은경우 DESENCRYPT/DESDECRYPT 예제 SQL> SET SERVEROUTPUT ON SQL> DECLARE data RAW256); key RAW128); encrypted_data RAW256); decrypted_data RAW256); BEGIN data := UTL_RAW.CAST_TO_RAW 'Hello Tibero!!!!'); key := UTL_RAW.cast_to_raw'MyEncryptionKey123MyEncryptionKey123'); dbms_output.put_line'source data : ' data); /* ENCRYPT */ DBMS_OBFUSCATION_TOOLKIT.DESEncryptinput => data, key => key, encrypted_data => encrypted_data); data := encrypted_data; 25
dbms_output.put_line'encrypted Data : ' encrypted_data); /* DECRYPT */ DBMS_OBFUSCATION_TOOLKIT.DESDecryptinput => data, key => key, decrypted_data => decrypted_data); dbms_output.put_line'decrypted Data : ' decrypted_data); dbms_output.put_line'result : ' UTL_RAW.CAST_TO_VARCHAR2 decrypted_data)); END; / PSM completed. -- 결과값 Source data : 48656C6C6F2054696265726F21212121 Encrypted Data : 751E5BE7EE419FACB0E132F8C91B997A Decrypted Data : 48656C6C6F2054696265726F21212121 Result : Hello Tibero!!!! 3.2.6. DESGETKEY - 임의의값을입력값으로받아 DES 알고리즘을위한키를생성하는 Procedure 와 Function < Prototype > Procedure DBMS_OBFUSCATION_TOOLKIT.DESGETKEY seed IN RAW, key OUT RAW ); DBMS_OBFUSCATION_TOOLKIT.DESGETKEY seed_string IN VARCHAR2, key OUT VARCHAR2 ); Function DBMS_OBFUSCATION_TOOLKIT.DESGETKEY seed IN RAW ) RETURN RAW; DBMS_OBFUSCATION_TOOLKIT.DESGETKEY seed_string IN VARCHAR2 ) RETURN VARCHAR2; 파라미터 설명 seed 80 자이상의임의의값 26
key 암호화하기위해주어짂키값 예외상황 설명 NO_SEED SEED_TOO_SHORT seed 의값이 NULL 인경우 seed 의길이가 80 보다작은경우 DESGETKEY 예제 CREATE OR REPLACE FUNCTION get_key_des RETURN raw AS l_keyr raw255); l_seed varchar2255); l_seedr raw255); BEGIN l_seed := 'UpKYrZHeiooBqkvpJHuImXrLOmVzYhgBhJcNLQL' 'wkkyahkgozknxpdbjcgypgnfpyqobagmtrtjuhxao'; l_seedr := UTL_RAW.CAST_TO_RAWl_seed); DBMS_OBFUSCATION_TOOLKIT.DESGetKey seed => l_seedr, key => l_keyr ); RETURN l_keyr; END; / Function 'GET_KEY_DES' created. SQL> VARIABLE created_key VARCHAR22000); SQL> EXEC :created_key :=get_key_des3 PSM completed. SQL> PRINT created_key CREATED_KEY ------------------------------------------ B0AEE475508C255F 4. Utility 접속정보암호화 27
Tibero 에서지원하는보안지갑을이용하면 Tibero 유틸리티에서 Tibero 접근시접속정보를암호화하여접속할수 있다. 이러한기능은백업이나, 어플리케이션이용시아이디 / 패스워드가노출되는것을막을수있고, 관리자가편리 하게 Tibero 를사용할수있게해준다. 4.1. tbsql tbsql 유틸리티는데이터베이스접속정보를암호화파일 wallet) 로저장하고사용하는기능을제공한다. SAVE CREDENTIAL 명령어맊입력하면홖경변수인 ISQL_WALLET_PATH 에지정한경로의파일에 tbsql 유틸리티에서 접속한데이터베이스의정보를암호화파일로맊들거나다음접속시사용할수있다. tbsql 의접속정보암호화기능 Tibero5 rev. 62562 버젂부터사용가능 DB 패치시 Wallet 파일재생성필요 SAVE CREDENTIAL 명령어 - tbsql 유틸리티의데이터베이스접속정보를암호화하여파일에저장한다. - 문법 : SAVE CREDENTIAL [filename] tbsql 의보안지갑사용설정 - Wallet 파일이저장될디렉토리를생성하고, ISQL_WALLET_PATH 홖경변수를설정한다. -- Wallet 디렉토리생성 $ mkdir -p /home/tibero/wallet $ chown 700 /home/tibero/wallet -- EXPIMP_WALLET 파일홖경변수설정 vi.bash_profile ## 추가부분 ## export ISQL_WALLET_PATH=/home/tibero/wallet/wallet.dat $ source.bash_profile tbsql 의접속정보암호화설정 - tbsql 에접속하여 wallet 을생성하고, Wallet 은 tbsql 에접속한사용자정보 ID/Password) 로생성이된다. 다른사용자가 wallet 파일을사용할수없도록권한을변경한다. -- tbsql Wallet 생성 형식 : tbsql id/password@dbname) $ tbsql sys/tibero@tibero tbsql 5 TmaxData Corporation Copyright c) 2008-. All rights reserved. 28
Connected to Tibero using tibero. SQL> SAVE CREDENTIAL Complete to generate the wallet file. SQL> q Disconnected. -- wallet 파일생성확인및권한변경 $ chmod 600 $ISQL_WALLET_PATH $ ls -alt $ISQL_WALLET_PATH -rw------- 1 tibero dba 32 Aug 4 18:03 /home/tibero/wallet/wallet.dat tbsql 접속정보암호화를설정으로사용자 ID를사용하지않고 tbsql 에접속 - tbsql에서 ID와 Password 없이 tbsql맊입력하여서 DB 에접속되고정상적으로쿼리가수행된다면 wallet 파일이정상적으로동작하는지확인할수있다. -- ID/PASSWD 없이 tbsql 접속 $ tbsql tbsql 5 TmaxData Corporation Copyright c) 2008-. All rights reserved. Connected to Tibero using tibero. SQL> ls user USERNAME -------------------------------------------------------------------------------- SYS SQL> select * from dual; DUMMY ----- X 1 row selected 4.2. tbloader 29
- tbloader 유틸리티는데이터베이스접속정보를암호화파일을이용하여사용하는기능을제공 - tbsql 에서생성한보안지갑 wallet) 을이용해 tbloader 에서 username, password, dbname 을외부로노출하지않고 로딩가능 Tibero 에서 tbloader 의접속정보암호화기능 Tibero5 rev. 68995 부터지원 tbsql Utility 에서맊든암호화파일을이용 4.1. tbsql 참조 ) tbsql 에서만듞 wallet file 과 loader 용 LR_WALLET_FILE 홖경변수설정 - tbloader 는별도의암호화파일을생성하지않고, tbsql 에서생성한암호화파일을사용하여접속정보암호화에 사용한다. tbloader 에서 LR_WALLET_PATH 를 wallet 홖경변수로사용한다. - LR_WALLET_PATH 가지칭하는파일은 tbsql 접속정보암호화파일을이용한다. -- EXPIMP_WALLET 파일홖경변수설정 vi.bash_profile ## 추가부분 ## export LR_WALLET_PATH=/home/tibero/wallet/wallet.dat $ source.bash_profile Test sample 생성 -- Table 생성 $ tbsql SQL> create table LOADER_TEST ORD_ID char4), PROD_ID number ); SQL> q -- Control file 생성 $ vi loader_test.ctl LOAD DATA INFILE './loader_test.dat' LOGFILE './loader_test.log' BADFILE './loader_test.bad' APPEND INTO TABLE LOADER_TEST ORD_ID position01:04),prod_id position12:17)) -- Data 파일생성 vi loader_test.dat n001 100001 30
n002 100012 n003 100123 tbloader 접속정보암호화를설정으로사용자 ID 를사용하지않고 tbloader 에접속 - tbloader 에서 ID 와 Password 없이 tbloader 맊입력하여서 DB 에접속되고정상적으로쿼리가수행된다면 wallet 파일이정상적으로동작하는지확인할수있다. -- ID/PASSWD 없이 tbloader 수행 $ tbloader control=loader_test.ctl tbloader 5 TmaxData Corporation Copyright c) 2008-. All rights reserved. Start loading... Committed and Completed successfully. -- 수행확인 $ tbsql tbsql 5 TmaxData Corporation Copyright c) 2008-. All rights reserved. Connected to Tibero using tibero. SQL> select * from loader_test; ORD_ID PROD_ID ------ ---------- n001 100001 n002 100012 n003 100123 3 rows selected. 4.3. tbexport / tbimport - tbexport/tbimport 유틸리티는데이터베이스접속정보를암호화파일을이용하여사용하는기능을제공 - tbexport/tbimport 암호화설정부분 Tibero5 rev.68194 부터지원 EXPIMP_WALLET 파일은패치변경시재생성필요 tbexport/tbimport 용 EXPIMP_WALLET 홖경변수설정 - tbexport/tbimport 에서는 EXPIMP_WALLET 를 wallet 홖경변수로사용한다. - Wallet 파일이저장될디렉토리가생성되어있지않다면디렉토리를생성하고, tbexport/tbimport 를실행하여 31
wallet 을생성한다. - Wallet 은 tbexport/tbimport 에기재한사용자정보 username/password) 로생성이된다. 다른사용자가 wallet 파일을사용할수없도록권한을변경한다. -- EXPIMP_WALLET 파일홖경변수설정 vi.bash_profile ## 추가부분 ## export EXPIMP_WALLET=/home/tibero/wallet/expimp_wallet.dat $ source.bash_profile -- WALLET 디렉토리생성 $ mkdir -p /home/tibero/wallet -- EXPIMP_WALLET 암호화파일생성 $ tbexport save_credential=$expimp_wallet username=sys password=tibero tbexport tbexport 5.0 S1419) 86310 Copyrightc) 2014 TmaxData, Co., Ltd. All rights reserved Patch files none) Credential saved: /home/tibero/wallet/expimp_wallet.dat -- 파일생성확인 $ ls -al expimp* -rw-r--r-- 1 tibero dba 39 Aug 4 14:38 expimp_wallet.dat -- EXPIMP_WALLET 파일권한변경 $ chmod 600 $EXPIMP_WALLET $ ls -alt $EXPIMP_WALLET -rw------- 1 tibero dba 39 Aug 4 14:38 /home/tibero/wallet/expimp_wallet.dat 암호화파일을이용한 tbexport 예제 - tbexport 에서 ID 와 Password 없이정상적으로수행된다면 wallet 파일이정상적으로동작하는지확인할수있다. -- ID/PASSWD 없이 Export 수행 $ tbexport port=8629 sid=tibero file=exp_full.dat full=y tbexport tbexport 5.0 S1419) 86310 Copyrightc) 2014 TmaxData, Co., Ltd. All rights reserved Patch files none) the entire database: Mon Aug 04 14:41:39 KST 2014 Export character set: MSWIN949 Export national character set: UTF-16 exporting tablespaces 32
exporting roles exporting public synonyms exporting schema: "OUTLN" exporting tables [1] OUTLN.OL$HINTS no rows exported. [0] OUTLN.OL$ no rows exported. exporting indexes exporting constraints exporting schema: "SYSGIS" exporting tables [0] SYSGIS.GEOMETRY_COLUMNS_BASE no rows exported. [1] SYSGIS.SPATIAL_REF_SYS_BASE 1 rows exported. exporting indexes exporting constraints exporting views exporting schema: "TIBERO" exporting sequences exporting tables [1] TIBERO.DEPARTMENTS 8 rows exported. [0] TIBERO.COUNTRIES 4 rows exported. [3] TIBERO.JOBS 12 rows exported. [2] TIBERO.EMPLOYEES 20 rows exported. [0] TIBERO.JOB_GRADES 6 rows exported. [2] TIBERO.LOCATIONS 5 rows exported. [3] TIBERO.REGIONS 4 rows exported. [1] TIBERO.JOB_HISTORY 8 rows exported. exporting indexes exporting constraints exporting views exporting schema: "TIBERO1" exporting constraints exporting referential constraints exporting PSMs Packing the file... Export completed successfully: Mon Aug 04 14:41:49 KST 2014 암호화파일을이용한 tbimport 예제 - tbimport 에서 ID 와 Password 없이정상적으로수행된다면 wallet 파일이정상적으로동작하는지확인할수있다. -- ID/PASSWD 없이 Import 수행 $ls *.dat -rw-r--r-- 1 tibero dba 225280 Aug 4 15:14 exp_full.dat $ tbimport port=8629 sid=tibero file=exp_full.dat user=tibero table=employees tbimport tbimport 5.0 S1419) 86310 Copyrightc) 2014 TmaxData, Co., Ltd. All rights reserved Patch files none) Unpacking the file... Import character set: MSWIN949 the USER: tibero: Mon Aug 04 16:04:21 KST 2014 Import national character set: UTF-16 importing schema: "OUTLN" importing schema: "SYSGIS" importing schema: "TIBERO" importing table "EMPLOYEES" [1] TIBERO.EMPLOYEES 20/20 rows imported. importing index "EMP_EMAIL_UK" importing index "EMP_EMP_ID_PK" importing index "EMP_MANAGER_IX" 33
importing index "EMP_NAME_IX" importing constraint "EMP_EMAIL_UK" importing constraint "EMP_EMP_ID_PK" importing constraint "EMP_HIRE_DATE_NN" importing constraint "EMP_LAST_NAME_NN" importing constraint "EMP_SALARY_MIN" importing schema: "SYSGIS" importing schema: "TIBERO" importing constraint "EMP_DEPT_FK" importing schema: "SYSGIS" importing schema: "TIBERO" importing schema: "SYSGIS" importing schema: "TIBERO" Import completed successfully: Mon Aug 04 16:04:22 KST 2014 5. 주의사항 5.1. 패치시주의사항 문제점 - Wallet 사용을위해 ISQL_WALLET_PATH 홖경변수가적용된상태에서패치를하게되면 system.sh 수행시 아래의내용과같이패스워드를계속물어보는문제가발생된다. $ cd $TB_HOME/scripts $ sh system.sh Enter SYS password: tibero Enter SYSCAT password: syscat Creating the role DBA... Enter Username: sys Enter Password: Create default system users & roles?y/n): y Creating system users & roles... Enter Username: sys Enter Password: 해결방법 - ISQL_WALLET_PATH 홖경변수를 unset 하여홖경변수에서해제한후패치를한다. $ echo $ISQL_WALLET_PATH /home/tibero5/wallet/wallet.dat $ unset ISQL_WALLET_PATH $ echo $ISQL_WALLET_PATH 34
$./system.sh Enter SYS password: tibero Enter SYSCAT password: syscat Creating the role DBA... Create default system users & roles?y/n): y Creating system users & roles... Creating virtual tables1)... Creating virtual tables2)... Granting public access to _VT_DUAL... Creating the system generated sequences... Creating internal dynamic performance views... 5.2. Windows 사용불가 접속정보암호화기능은 windows 에서는사용할수없다. 5.3. 패스워드변경시 Wallet 재생성 접속정보 wallet 에암호화된아이디와패스워드가저장되므로 wallet 에저장된계정의패스워드가변경될때 wallet 을싞규생성해야한다. 6. 기타 컬럼암호화와테이블스페이스암호화차이점 컬럼암호화 - 컬럼암호화는기록시 Data를암호화하여 Buffer Cache의 Data Block에기록 - 컬럼암호화된 DATA 를읽을때 Data Blcok이 Buffer Cache에있거나 Disk에있거나항상복호화과정필요 - DATA BLOCK DUMP 를이용한확인 : 블록덤프 alter system dump ~ ) 사용하여암호화된상태의 Data 확인 테이블스페이스암호화 - Tablespace 암호화방식을사용시 DB Buffer Cache 내에암호화되지않은 DATA 로저장. 이때 Buffer Cache에있는내용을 Disk에기록하는시점에 DBWR 프로세스가이를암호화하여 DATAFILE에기록 - 암호화된 DATA 를읽을때해당 Data Block이 Buffer Cache내에존재하면복호화과정이필요없이바로읽음 - 이미 Disk에기록된내용일읽을때에는 Data Block을 Disk에서 Buffer Cache로올리면서복호화하여 Data 블록에저장 - DATA BLOCK DUMP 를이용한확인 : 블록덤프 alter system dump ~ ) 사용하여암호화되지않은상태의 Data 확인 35
col 0: [17] 0000: 10 04 78 69 EB 52 DF 12 A7 DC 36 48 92 B5 16 2A..xi.R...6H...* col 0: [9] 0000: 08 54 4D 41 58 44 41 54 41.TMAXDATA Data File 에서확인 다음과같이 strings 를이용하여 Data File 내에 TMAXDATA 문자열이암호화되었기때문에더이상존재하지 않음을확인할수있다. $ strings -a usr001.dtf grep 'TMAXDATA' 36
Copyright 2014 TmaxData Co., Ltd. All Rights Reserved. Trademarks Tibero RDBMS is a registered trademark of TmaxData Co., Ltd. Other products, titles or services may be registered trademarks of their respective companies. Contact Information TmaxData can be contacted at the following addresses to arrange for a consulting team to visit your company and discuss your options. Korea TmaxData Co., Ltd 5, Hwangsaeul-ro 329beon-gil, Bundang-gu, Seongnam-si, Gyeonggi-do. South Korea Tel: +82-31-779-7113 Fax: +82-31-779-7119 Email: info@tmax.co.kr Web Korean): http://www.tmaxdata.com Technical Support: http://technet.tmaxsoft.com USA TmaxSoft, Inc. 560 Sylvan Avenue Englewood Cliffs, NJ 07632. U.S.A Tel: +1-201-567-8266 Fax: +1-201-567-7339 Email: info@tmaxsoft.com Web English): http://www.tmaxsoft.com Russia Tmax Russia L.L.C. Grand Setun Plaza, No A204 Gorbunova st.2, Moscow, 121596 Tel: +7495)970-01-35 Email: info.rus@tmaxsoft.com Web Russian): http://ru.tmaxsoft.com Singapore Tmax Singapore Pte. Ltd. 430 Lorong 6, Toa Payoh #10-02, OrangeTee Building. Singapore 319402 Tel: +65-6259-7223 Email: info.sg@tmaxsoft.com United Kingdom TmaxSoft UK Ltd. Surrey House, Suite 221, 34 Eden Street, Kingston-Upon- Thames, KT1 1ER United Kingdom Tel: + 44-0)20-8481-3776 Email: info.uk@tmaxsoft.com Web English): http:/www.tmaxsoft.com Japan TmaxSoft Japan Co., Ltd. 5F Sanko Bldg, 3-12-16 Mita, Minato-Ku, Tokyo, 108-0073 Japan Tel: +81-3-5765-2550 Fax: +81-3-5765-2567 Email: info.jp@tmaxsoft.com Web Japanese): http://www.tmaxsoft.co.jp China TmaxSoft China Co., Ltd. Beijing Silver Tower, RM 1508, 2 North Rd Dong San Huan, Chaoyang District, Beijing, China, 100027. China Tel: +86-10-6410-6145~8 Fax: +86-10-6410-6144 Email: info.cn@tmaxsoft.com Web Chinese): http://www.tmaxsoft.com.cn Brazil TmaxSoft Brazil Avenida Copacabana, 177-3 andar 18 do Forte Empresarial, Alphaville - Barueri, Sao Paulo, SP-Brasil CEP 06472-001 Email: contato.brasil@tmaxsoft.com TD-TRSE-D0728121 37