Oracle® นำเสนอฟีเจอร์ Transparent Data Encryption (TDE) ใน Oracle 12C เพื่อวัตถุประสงค์ด้านความปลอดภัย ให้ผู้ใช้เปิดใช้งาน tablespace และ column-level encryption สำหรับข้อมูลที่ละเอียดอ่อน
บทนำ
หลังจาก encrypt data แล้ว เฉพาะ authorized users หรือ applications เท่านั้นที่สามารถเข้าถึงได้ Oracle ใช้ tools และ processes เพื่อ authenticate, authorize และ audit databases แต่ไม่ใช่ OS data files ที่เก็บข้อมูล
ตาม Oracle Database Advanced Security Guide (ASOAG) "TDE encrypts sensitive data stored in data files เพื่อป้องกัน unauthorized decryption TDE เก็บ encryption keys ใน security module ภายนอกฐานข้อมูล เรียกว่า keystore"
Required TDE Privileges (สิทธิ์ที่จำเป็นสำหรับ TDE)
เพื่อกำหนดค่า TDE ให้ grant ผู้ใช้ SYSKM administrative privilege จากนั้น ASOAG แนะนำว่า "สร้าง password file สำหรับมัน เพื่อให้ผู้ใช้สามารถ connect ไปยัง database เป็น SYSKM โดยใช้ password ... เพื่อกำหนดค่า TDE column หรือ tablespace encryption คุณไม่ต้องการ SYSKM ... privilege" อย่างไรก็ตาม ASOAG เพิ่มว่าคุณต้องการ privileges ต่อไปนี้ "เพื่อ encrypt table columns และ tablespaces:
- CREATE TABLE
- ALTER TABLE
- CREATE TABLESPACE
- ALTER TABLESPACE (สำหรับ online และ offline tablespace encryption)
- ALTER DATABASE (สำหรับ fast offline tablespace encryption)"
นอกจาก privileges เหล่านี้ คุณควรสร้าง wallet ที่ควรจะ open เสมอเพื่อเปิดใช้งาน TDE Wallet ยังเรียกว่า keystore ใน 12c
Two Types of TDE (สองประเภทของ TDE)
ส่วนต่อไปนี้อธิบายสองประเภทของ TDE:
1. Transparent Data Encryption Column Encryption
สิ่งนี้ปกป้องข้อมูลลับ เช่น บัตรเครดิต, หมายเลขประกันสังคม ฯลฯ ที่เก็บใน table ตาม ASOAG มันใช้ "two-tiered key-based architecture เพื่อ transparently encrypt และ decrypt sensitive table columns TDE master encryption key เก็บใน external security module ซึ่งอาจเป็น Oracle software หรือ hardware keystore TDE master encryption key นี้ encrypt และ decrypt TDE table key ซึ่งลำดับ encrypt และ decrypt data ใน table column"
Image source: https://docs.oracle.com/database/121/ASOAG/introduction-to-transparent-data-encryption.htm#ASOAG10137
2. Transparent Data Encryption Tablespace Encryption
Objects ทั้งหมดที่สร้างใน encrypted tablespace จะถูก encrypt อัตโนมัติ มันช่วยให้คุณ encrypt entire table หรือ multiple columns ASOAG เพิ่มเติมว่า: "TDE tablespace encryption ใช้ two-tiered key-based architecture เพื่อ transparently encrypt (และ decrypt) tablespaces TDE master encryption key เก็บใน external security module (software หรือ hardware keystore) TDE master encryption key นี้ใช้ encrypt TDE tablespace encryption key ซึ่งลำดับใช้ encrypt และ decrypt data ใน tablespace"
Image source: https://docs.oracle.com/database/121/ASOAG/introduction-to-transparent-data-encryption.htm#ASOAG10137
Purpose of TDE (วัตถุประสงค์ของ TDE)
ASOAG กล่าวถึงเหตุผลต่อไปนี้ในการใช้ TDE:
- เพื่อ secure sensitive data แม้ใครก็ตามจะขโมย storage media หรือ data file
- ช่วยให้เรา address security-related regulatory compliance issues
- สร้าง additional auxiliary หรือ views เพื่อ decrypt application data มัน transparently decrypts table data สำหรับ database user และ application ด้วยการเปลี่ยนแปลงน้อยหรือไม่มีเลยใน application
- DB และ application users ไม่จำเป็นต้องรู้ว่าข้อมูลที่พวกเขาเข้าถึงถูก encrypt
- คุณสามารถ encrypt data ได้โดยไม่มี downtime โดยใช้ online redefinition หรือ encrypt ใน offline mode
- คุณไม่ต้องการ application changes ใดๆ เพื่อจัดการ encrypted data Database encrypt และ decrypt data
- Oracle Database ทำ TDE master encryption key และ keystore management operations อัตโนมัติ
Configure TDE (กำหนดค่า TDE)
ดำเนินการตามขั้นตอนต่อไปนี้เพื่อกำหนดค่า TDE และ wallet:
- สร้าง wallet หรือ keystore location:
mkdir -p /u01/oracle/wallet - อัปเดต wallet หรือ keystore location ใน sqlnet.ora:
cat $ORACLE_HOME/network/admin/sqlnet.ora # sqlnet.ora Network Configuration File: /home/oracle/app/oracle/product/12.1.0/dbhome_1/network/admin/sqlnet.ora # Generated by Oracle configuration tools. NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT) ENCRYPTION_WALLET_LOCATION = (SOURCE =(METHOD = FILE)(METHOD_DATA = (DIRECTORY = /u01/oracle/wallet))) - สร้าง keystore:
SQL> ADMINISTER KEY MANAGEMENT CREATE KEYSTORE '/u01/oracle/wallet/' IDENTIFIED BY Oraclewallet#123 ; keystore altered. SQL> host ls /u01/oracle/wallet/ Oraclewallet.P12 - เปิด keystore:
SQL> ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY Oraclewallet#123; keystore altered. - Activate the key:
SQL> SET LINESIZE 100 SELECT con_id, key_id FROM v$encryption_keys; SQL> no rows selected SQL> ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY Oraclewallet#123 WITH BACKUP; keystore altered. SQL> SET LINESIZE 100 SELECT con_id, key_id FROM v$encryption_keys; SQL> CON_ID KEY_ID ---------- ------------------------------------------------------------------------------ 0 HTDRKP*%GRLOHNRWMrX2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAA SQL> SET LINESIZE 200 COLUMN wrl_parameter FORMAT A50 SELECT * FROM v$encryption_wallet; SQL> WRL_TYPE WRL_PARAMETER STATUS WALLET_TYPE WALLET_OR FULLY_BAC CON_ID -------------------- -------------------------------------------------- ------------------------------ -------------------- --------- --------- ---------- FILE /u01/oracle/wallet/ OPEN PASSWORD SINGLE NO 0 - สร้าง encrypted tablespace:
SQL> CREATE TABLESPACE ENCRYPTION_TEST datafile '/u01/oracle/app/oracle/oradata/db/encrytest.dbf' size 2G ENCRYPTION USING 'AES256' DEFAULT STORAGE(ENCRYPT); 2 3 4 Tablespace created. SQL> create table ENCRYPTION_EMP( empno Number(3), Name varchar(10) ) tablespace ENCRYPTION_TEST; 2 3 4 Table created. SQL> select tablespace_name,encrypted from dba_tablespaces where tablespace_name='ENCRYPTION_TEST'; TABLESPACE_NAME ENC ------------------------------ --- ENCRYPTION_TEST YES - สร้าง table พร้อม encrypted column:
SQL> CREATE TABLE employee ( first_name VARCHAR2(128), last_name VARCHAR2(128), empID NUMBER, salary NUMBER(6) ENCRYPT ); 2 3 4 5 6 Table created. SQL> select owner,table_name,column_name,encryption_alg from dba_encrypted_columns where table_name='EMPLOYEE'; OWNER TABLE_NAME COLUMN_NAME ENCRYPTION_A ---------- ------------ ------------ ----- RAJ EMPLOYEE SALARY AES 192 bits key - เปิดใช้งาน autologin:
SQL> SELECT * FROM v$encryption_wallet; WRL_TYPE WRL_PARAMETER STATUS WALLET_TYPE WALLET_OR FULLY_BAC CON_ID ---------- ------------------- ------------ --------------- ------------- ------------- ---------- FILE /u01/oracle/wallet/ OPEN PASSWORD SINGLE NO 0
ที่นี่ wallet_type เป็น PASSWORD ทุกครั้งที่คุณ restart database คุณต้อง open key หรือ wallet ให้ explicitly เพื่อหลีกเลี่ยงสิ่งนี้ คุณสามารถ enable auto login ซึ่งจะเปิด wallet อัตโนมัติเมื่อ database restart
สรุป
TDE ช่วยให้คุณ secure highly sensitive data แม้ datafile หรือ media storage จะถูกขโมย ข้อมูลก็ไม่พร้อมใช้งานจนกว่าผู้ใช้จะมี key เพื่อ decrypt มัน
เรียนรู้เพิ่มเติมเกี่ยวกับบริการฐานข้อมูลของเรา
ใช้แท็บ Feedback เพื่อแสดงความคิดเห็นหรือถามคำถาม คุณยังสามารถเริ่มการสนทนากับเราได้