일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- oracle installation
- SILENTMODE
- Installation
- diskgroup
- oracle recovery
- 오지지
- DataGuard
- Opatch
- 티베로
- ORACLE19C
- 오라클구조
- 오라클
- Oracle 19c
- 사일런트모드
- 오라클아키텍쳐
- 데이터베이스
- 오라클설치
- 19c
- linux
- SSH
- ogg
- Oracle
- ActiveDataGuard
- goldengate
- 데이터가드
- OracleGoldenGate
- oracle goldengate
- 디비투
- Database
- adg
- Today
- Total
DoubleDBDeep
[ORACLE] TDE 암호화 설정 본문
TDE (Transparent Data Encryption)
TDE를 사용하여 테이블 및 테이블스페이스에 저장하는 중요한 데이터를 암호화할 수 있다.
컬럼레벨로 암호화를 걸거나 테이블스페이스 자체에 암호화를 걸 수 있다.
-- TDE 설정 가능한 명령문
CREATE TABLE
ALTER TABLE
CREATE TABLESPACE
ALTER TABLESPACE (for online and offline tablespace encryption)
ALTER DATABASE (for fast offline tablespace encryption)
Keystore 검색 순서
1. KEYSTORE_CONFIGURATION = FILE일 때 , WALLET_ROOT 파라미터에 정의된 경로 (oracle 권장)
2. 1이 설정되어 있지 않을 때 , sqlnet.ora file의 WALLET_LOCATION 에 정의된 경로
3. 2가 설정되어 있지 않을 때 , sqlnet.ora file의 ENCRYPTION_WALLET_LOCATION 에 정의된 경로
4. 위가 전부 설정되어 있지 않을 때 , $ORACLE_BASE/admin/db_unique_name/wallet
5. $ORACLE_BASE가 설정되어 있지 않을 때, $ORACLE_HOME/admin/db_unique_name/wallet
사전 설정
WALLET DIRECTORY 생성
su - oracle
env | grep ORACLE
-----------------------> 확인 후
mkdir $ORACLE_HOME/network/admin/$ORACLE_UNQNAME/wallet
COMPATIBLE 확인
## COMPATIBLE(호환성) 확인 (11.2.0.0 이상)
SQL> show parameter compatible
<< WALLET_ROOT, TDE_CONFIGURATION PARAMETER 사용 방법 >>
오라클 권장 방법
-- WALLET_ROOT PARAMETER SETTING
-- $ORACLE_HOME/network/admin/wallet/$ORACLE_UNQNAME
SQL> alter system set wallet_root='/u01/app/oracle/product/19.0.0/dbhome_1/network/admin/wallet/UG19' scope=spfile sid='*';
System altered.
SQL> exit;
srvctl stop database -d UG19
-- TDE_CONFIGURATION PARAMETER SETTING
SQL> alter system set tde_configuration="KEYSTORE_CONFIGURATION=FILE" scope=both sid='*';
System altered.
<< sqlnet.ora#ENCRYPTION_WALLET_LOCATION 파라미터 사용 방법 >>
cd $ORACLE_HOME/network/admin
vi sqlnet.ora
ENCRYPTION_WALLET_LOCATION=
(SOURCE = (METHOD = FILE)
(METHOD_DATA =
(DIRECTORY = /u01/app/oracle/product/19.0.0/dbhome_1/network/admin/wallet/$ORACLE_UNQNAME)))
Keystore 생성
# TDE Keystore 생성
sqlplus / as syskm
administer key management create keystore identified by [password] ;
keystore altered.
-> 위 명령을 실행하면 WALLET_ROOT에 명시된 파라미터 경로 하위에 /tde 디렉토리가 자동 생성된다.
ASM에서 생성하려면 WALLET_ROOT를 +DATA/ORACLE_UNQNAME 으로 지정한다
-> tde 디렉토리 하위에 ewallet.p12 file이 생성된다. (keystore파일)
# 자동 로그인 설정
- auto-login software keystore는 다른 컴퓨터에서 접속해도 keystore를 열 수 있다
SQL> administer key management create auto_login keystore from keystore identified by [password];
keystore altered.
-> local keyword는 RAC에서는 사용하지 않는다. / local 사용 시 해당 명령어를 사용한 노드에서만 keystore에 액세스할 수 있기 때문에 다른 노드에서는 사용할 수 없어짐
-> 위 명령문을 실행하면 tde 디렉토리 하위에 cwallet.sso 파일이 생성된다.
생성된 두 파일을 절대 지우지 마쇼 ..
TDE Master Key 설정
keystore에서 TDE Master Key를 만들거나 액세스하려면 먼저 open 과정을 진행해야함.
open방법에는 아래처럼 수동으로 열거나 force절을 명시해서 여는 2가지 방법이 있는데,
force절 사용 시에는 작업 기간동안 일시적으로 열고 완료되면 닫힘
수동으로 열면 다시 수동으로 닫을 때 까지 열린상태로 유지됨
# Key OPEN
SQL> ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY [password] ;
# Set key
SQL> administer key management set key force keystore identified by [password] with backup ;
keystore altered.
ADMINISTER KEY MANAGEMENT SET KEY
[USING TAG 'tag']
[FORCE KEYSTORE]
IDENTIFIED BY [EXTERNAL STORE] | keystore_password
[WITH BACKUP [USING 'backup_identifier']];
- tag : 사용자 정의 속성 및 정보
- force keystore : keystore를 일시적으로 open
- with backup : keystore의 백업 생성
# TDE 확인
SQL> SELECT WRL_TYPE, WRL_PARAMETER, WALLET_TYPE, STATUS FROM V$ENCRYPTION_WALLET;
# 2번 노드에 Wallet Copy
scp -rp $ORACLE_HOME/network/admin/wallet oracle@node2:$ORACLE_HOME/network/admin/
# db 재기동
srvctl stop database -d UG19
srvctl start database -d UG19
# 확인
SQL> SELECT INST_ID, WRL_TYPE,WRL_PARAMETER,STATUS, WALLET_TYPE FROM gv$encryption_wallet;
1. column level
테이블의 개별 컬럼 암호화

예외 // 컬럼 encryption을 사용할 수 없는 경우
1) B-tree 외의 인덱스
2) 인덱스 Range scan
3) CDC
4) TTS
5) PK COLUMN
6) FK COLUMN
예제
TABLE 생성 >>
CREATE TABLE TDE_USER.COLUMN_TDE_TABLE (
first_name VARCHAR2(128),
last_name VARCHAR2(128),
empID NUMBER,
salary NUMBER(6) ENCRYPT);
암호화 걸려있지 않은 컬럼 암호화 >>
ALTER TABLE TDE_USER.COLUMN_TDE_TABLE MODIFY (first_name ENCRYPT);
암호화 걸린 컬럼 암호화 해제 >>
ALTER TABLE TDE_USER.COLUMN_TDE_TABLE MODIFY (first_name DECRYPT);
인덱스 생성 >>
CREATE TABLE TDE_USER.COLUMN_TDE_TABLE2 (
first_name VARCHAR2(128),
last_name VARCHAR2(128),
empID NUMBER ENCRYPT NO SALT,
salary NUMBER(6) ENCRYPT USING 'AES256');
CREATE INDEX TDE_USER.I_COLUMN_TDE_TABLE2 on TDE_USER.COLUMN_TDE_TABLE (empID);
Salt - encryption을 강화시키기 위한 랜덤 문자열추가
Salt 추가
ALTER TABLE TDE_USER.COLUMN_TDE_TABLE2 MODIFY (first_name ENCRYPT SALT);
Salt 제거
ALTER TABLE TDE_USER.COLUMN_TDE_TABLE2 MODIFY (first_name ENCRYPT NO SALT);
새로운 알고리즘 지정 >>
ALTER TABLE TDE_USER.COLUMN_TDE_TABLE2 REKEY USING '3DES168';
2. tablespace level
- tablespace에 encryption을 설정하기 위해서는 COMPATIBLE PARAMETER가 11.2.0.0 이상으로 설정되어야 함.
- 3DES168, AES128, AES192,AES256 4가지 알고리즘을 사용할 수 있다.
SQL> SHOW PARAMETER COMPATIBLE
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
compatible string 19.0.0
noncdb_compatible boolean FALSE
- tablespace encryption은 no salt 옵션을 사용할 수 없다.

1) TBS 생성
CREATE TABLESPACE encrypt_ts
DATAFILE '+DATA' SIZE 1M
ENCRYPTION USING 'AES256' ENCRYPT;
2) TBS에 TABLE 생성
create table TDE_USER.TBS_TDE_TABLE1 (
rno number(3,0) constraint pk_rno primary key,
rname varchar2(30) constraint nn_rname not null,
movingdate date,
zipcode varchar2(5),
rent number(10,0) constraint ck_rent check (rent>=0)
)
tablespace encrypt_ts;
TDE 적용 확인
-- 암호화 컬럼 확인
SELECT *
FROM DBA_ENCRYPTED_COLUMNS
;
-- 암호화 테이블스페이스 확인
SELECT
A.OWNER,
A.TABLE_NAME,
A.TABLESPACE_NAME
FROM
DBA_TABLES A, DBA_TABLESPACES B
WHERE
A.TABLESPACE_NAME = B.TABLESPACE_NAME
AND
B.ENCRYPTED='YES'
;
'ORACLE > Administration' 카테고리의 다른 글
[ORACLE] UNDO Tablespace 관리 및 재생성 (0) | 2023.07.18 |
---|---|
[ORACLE] control file 관리 (0) | 2023.07.18 |
[ORACLE] INS-30132 PRVF-4008 PRVF-4098 | 노드간 SSH 비밀번호 없는 접속 설정 (0) | 2023.07.12 |
[ORACLE] SCAN IP 재설정 및 SCAN IP NAME(Interface명) 변경 (0) | 2023.05.03 |
[ORACLE] dbca Node Sellection 에서 모든 노드가 뜨지 않는 경우 해결 (0) | 2023.05.03 |