Oracle Databaseで透過的データベース暗号化(Transparent Data Encryption(TDE))の設定・構築を行う
今回は、Oracle Database 12cR1 において設定を行います。
透過的データベース暗号化(Transparent Data Encryption(TDE))は、データベース内の保存データを暗号化することによって、機密データを保護します。
データベースの物理ファイルを暗号化することにより、保存データを暗号化します。
データはストレージに書き込まれる前に自動的に暗号化され、ストレージから読み込まれる時に自動的に複合化されます。
マニュアルはこちら
Oracle® Database Advanced Securityガイド 12cリリース1 (12.1) https://docs.oracle.com/cd/E57425_01/121/ASOAG/toc.htm
概要説明はこちら
Transparent Data Encryption https://www.oracle.com/technetwork/jp/database/security/index-099011-ja.html
Oracle Advanced Securityの透過的データベース暗号化(Transparent Data Encryption(TDE))は、保存されているデータをデータベース・レイヤーで暗号化することで、潜在的な攻撃者がデータベースをバイパスしてストレージから機密情報を読み取ることを阻止します。
データベース認証が済んだアプリケーションおよびユーザーは、(アプリケーション・コードまたは構成変更なしで)透過的にアプリケーション・データへのアクセスを維持することができますが、表領域ファイルから機密データを読み取ろうとするOSユーザーによる攻撃や、盗み取ったディスクまたはバックアップから情報を読み取ろうとする窃盗犯の攻撃によるクリアテキスト・データへのアクセスは拒否されます。
暗号化鍵アーキテクチャは2層に分かれているため、鍵の管理が容易で、鍵と暗号化データの明確な分離が可能です。また、アシスト付き鍵ローテーション機能があり、データを再暗号化する必要はありません。キーストアの管理には、Oracle Enterprise Managerの便利なWebコンソールまたはコマンドラインを使用できます。
keystoreを格納するディレクトリ作成
今回は同サーバ上にディレクトリを作成します。
su -
mkdir -p /keystore/dbvms
chown -R oracle:oinstall /keystore
chmod -R 755 /keystore
sqlnet.oraに記載する
ENCRYPTION_WALLET_LOCATIONを記載します。
vi $ORACLE_HOME/network/admin/sqlnet.ora
ENCRYPTION_WALLET_LOCATION=
(SOURCE=
(METHOD=FILE)
(METHOD_DATA=
(DIRECTORY=/keystore/$ORACLE_UNQNAME)))
環境変数に ORACLE_UNQNAME を記載する。
※ $ORACLE_UNQNAMEをENCRYPTION_WALLET_LOCATIONに使用しているため設定しています。
vi .oraenv_dbvms
export ORACLE_UNQNAME=dbvms
TDEキーストアの作成
. /home/oracle/.oraenv_dbvms
sqlplus / as sysdba
administer key management create keystore '/keystore/dbvms' identified by "oracle";
【コマンド結果】
SQL> administer key management create keystore '/keystore/dbvms' identified by "oracle";
キーストアが変更されました。
SQL>
TDEキーストアのオープン
administer key management set keystore open identified by "oracle";
【コマンド結果】
SQL> administer key management set keystore open identified by "oracle";
キーストアが変更されました。
TDEキーストアのオープン確認
set pages 2000 lin 2000
col WRL_TYPE for a8
col WRL_PARAMETER for a30
col STATUS for a30
col WALLET_TYPE for a30
select INST_ID, WRL_TYPE, WRL_PARAMETER, STATUS, WALLET_TYPE from GV$ENCRYPTION_WALLET order by 1;
【コマンド結果】
INST_ID WRL_TYPE WRL_PARAMETER STATUS WALLET_TYPE
---------- -------- ------------------------------ ------------------------------ ------------------------------
1 FILE /keystore/dbvms/ OPEN_NO_MASTER_KEY PASSWORD
SQL>
TDEマスター暗号化鍵の作成
administer key management set key identified by "oracle" with backup using 'deploy';
【コマンド結果】
SQL> administer key management set key identified by "oracle" with backup using 'deploy';
キーストアが変更されました。
SQL>
TDEマスター暗号化鍵の確認
alter session set nls_timestamp_tz_format = 'yyyy/mm/dd hh24:mi:ss';
col CREATOR_DBNAME for a15
col KEY_ID for a60
col CREATION_TIME for a20
col ACTIVATION_TIME for a20
select CREATOR_DBNAME, KEY_ID, CREATION_TIME, ACTIVATION_TIME from V$ENCRYPTION_KEYS order by 1,2;
【コマンド結果】
CREATOR_DBNAME KEY_ID CREATION_TIME ACTIVATION_TIME
--------------- ------------------------------------------------------------ -------------------- --------------------
dbvms AccLZFJI/U95v/XKfMIdMWIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 2019/03/08 07:52:37 2019/03/08 07:52:37
SQL>
自動ログイン・キーストア作成
administer key management create auto_login keystore from keystore '/keystore/dbvms' identified by "oracle";
DB再起動
shutdown immediate
startup
exit
自動ログインキーストアのオープン状態確認
列 STATUS が “OPEN”、列 WALLET_TYPE が “AUTOLOGIN” となっていること
sqlplus / as sysdba
set lines 200
col WRL_TYPE for a8
col WRL_PARAMETER for a60
col STATUS for a6
col WALLET_TYPE for a15
select INST_ID, WRL_TYPE, WRL_PARAMETER, STATUS, WALLET_TYPE from GV$ENCRYPTION_WALLET order by 1;
exit
【コマンド結果】
INST_ID WRL_TYPE WRL_PARAMETER STATUS WALLET_TYPE
---------- -------- ------------------------------------------------------------ ------ ---------------
1 FILE /keystore/dbvms/ OPEN AUTOLOGIN
暗号化表領域の作成
CREATE TABLESPACE dbdata
DATAFILE '/u01/app/oracle/oradata/dbvms/dbdata.dbf' SIZE 3000M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M
SEGMENT SPACE MANAGEMENT AUTO
ENCRYPTION USING 'AES256'
DEFAULT STORAGE (ENCRYPT);
表領域の確認
set pages 2000 lin 2000
col TABLESPACE_NAME for a15
col EXTENT_MANAGEMENT for a17
col ALLOCATION_TYPE for a15
col SEGMENT_SPACE_MANAGEMENT for a25
col BIGFILE for a6
col ENCRYPTED for a9
SELECT
TABLESPACE_NAME
,INITIAL_EXTENT
,MAX_SIZE
,STATUS
,EXTENT_MANAGEMENT
,ALLOCATION_TYPE
,SEGMENT_SPACE_MANAGEMENT
,BIGFILE
,ENCRYPTED
FROM DBA_TABLESPACES
ORDER BY 1;
【コマンド結果】
TABLESPACE_NAME INITIAL_EXTENT MAX_SIZE STATUS EXTENT_MANAGEMENT ALLOCATION_TYPE SEGMENT_SPACE_MANAGEMENT BIGFIL ENCRYPTED
--------------- -------------- ---------- ------ ----------------- --------------- ------------------------- ------ ---------
dbdata 1048576 2147483645 ONLINE LOCAL UNIFORM AUTO NO YES
SYSAUX 65536 2147483645 ONLINE LOCAL SYSTEM AUTO NO NO
SYSTEM 65536 2147483645 ONLINE LOCAL SYSTEM MANUAL NO NO
TEMP 1048576 2147483645 ONLINE LOCAL UNIFORM MANUAL NO NO
UNDOTBS1 65536 2147483645 ONLINE LOCAL SYSTEM MANUAL NO NO
USERS 65536 2147483645 ONLINE LOCAL SYSTEM AUTO NO NO
データ・ファイルの確認
col TABLESPACE_NAME for a15
col FILE_NAME for a70
col AUTOEXTENSIBLE for a15
col ONLINE_STATUS for a15
SELECT
TABLESPACE_NAME
,FILE_NAME
,BYTES/1024/1024 MB
,AUTOEXTENSIBLE
,STATUS
,ONLINE_STATUS
FROM DBA_DATA_FILES
ORDER BY 1;
物理的な暗号化表領域の確認
テーブルを作成する
create table CHECK_ENCRYPT_TABLE(COL1 number, COL2 VARCHAR2(40)) tablespace dbdata;
insert into CHECK_ENCRYPT_TABLE values (1,'CHECK_ENCRYPT_VALUE');
commit;
データファイルに反映されるように複数回ログスイッチを行う
alter system switch logfile;
exit
物理的な暗号化を確認する。CHECK_ENCRYPT_VALUEという文言がないかどうか確認する
strings '/u01/app/oracle/oradata/dbvms/dbdata.dbf' | grep CHECK_ENCRYPT_VALUE
関連しているかもしれない記事
- GoldenGate関連プロセスのsession情報を確認する方法
- AWR(DBA_HIST表)を使用した確認SQL
- GoldenGateから実行されたSQLを確認する方法(Integrated Replicat)
- GoldenGateパラメータの定義情報の取得(info paramコマンド)