Trang chủ   Khách hàng đăng nhập   Đối tác đăng nhập   Liên hệ Tìm kiếm:  
   
Đào tạo Giải pháp Kiến thức Tin tức Giới thiệu

Oracle 11g - Mã hóa TDE

 

Bài viết này sẽ trình bày những ý chủ điểm sau:

  1. Khái niệm
  2. Cơ chế quản lý khóa
  3. Cấu hình Wallet
  4. Ví dụ mã hóa TDE

Khái niệm

Transparent Data Encryption (TDE) là cơ chế mã hóa dữ liệu trong suốt với người dùng cuối; nghĩa là không cần sửa mã nguồn như cơ chế mã hóa dùng hàm API như gói lệnh DBMS_OBFUSCATION_TOOLKIT(9i) và DBMS_CRYPTO (10g).

Có hai điểm cần lưu ý khi dùng TDE:

  1. TDE chỉ mã hóa dữ liệu ở mức File, dữ liệu khi lưu trong File sẽ ở dạng mã hóa. Cách này giúp File dữ liệu bị đánh cắp nếu không có khóa thì không xem được.
  2. Người dùng có quyền truy cập; ví dụ quyền SELECT, đến dữ liệu thì mặc nhiên sẽ nhìn thấy dữ liệu ở dạng bản rõ.

Cơ chế quản lý khóa

TDE dùng “ví” (Wallet) để quản lý khóa. Trong đời thường, ví đuợc dùng để lưu những gì quan trọng, như : tiền, CMND, thông tin bí mật … Ví trong Oracle cũng vậy, ví là một tập tin nhị phân và thường dùng để lưu khóa giải mã, ta gọi khóa này là MK (Master Key).

Tuy nhiên, TDE lại mã hóa dữ liệu bảng trong Database với khóa CK (Column-Key, lưu ý mỗi bảng sẽ chỉ có 1 khóa CK dù mã hóa nhiều cột). Oracle Database không lưu khóa CK ở dạng bản rõ, mà Oracle lưu bản mã của khóa CK; tức là lưu kết quả của hàm này encrypt(CK,MK).

Tiến trình xem dữ liệu mã hóa TDE như sau:

  1. Người dùng xem dữ liệu mã hóa TDE
  2. Oracle đọc khóa MK từ Wallet lưu ngoài Database
  3. Dùng mã MK giải mã CK trong database: CK = decrypt(encrypted_CK, MK)
  4. Dùng khóa CK để giải mã dữ liệu bảng mã hóa trong Database

Cấu hình Oracle Wallet

Gồm các bước sau:

  1. Cấu hình vị trí lưu Wallet trong sqlnet.ora
  2. [oracle@oraserver ~]$ mkdir /u01/app/oracle/product/11.2.0/dbhome_1/wallet

    [oracle@oraserver ~]$ vi $ORACLE_HOME/network/admin/sqlnet.ora

    [oracle@oraserver ~]$ more $ORACLE_HOME/network/admin/sqlnet.ora

    #SQLNET.ORA Network Configuration File

    #Created by Oracle Enterprise Manager Clone Database tool

     

    ENCRYPTION_WALLET_LOCATION=

    (SOURCE=

            (METHOD=file)

            (METHOD_DATA=

                    (DIRECTORY=/u01/app/oracle/product/11.2.0/dbhome_1/wallet)

            )

    )

     

    [oracle@oraserver ~]$

     

  3. Tạo Wallet
  4. Lệnh sau tự động tạo và mở Wallet

    [oracle@oraserver ~]$ oracleviet

     

    SQL*Plus: Release 11.2.0.1.0 Production on Tue Nov 1 12:17:28 2011

     

    Copyright (c) 1982, 2009, Oracle.  All rights reserved.

     

     

    Connected to:

    Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

    With the Partitioning, OLAP, Data Mining and Real Application Testing options

     

    oracleviet@orcl> ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY "password";

    System altered.

     

    oracleviet@orcl>

     

  5. Mở / đóng Wallet
  6. Mặc định khi tạo Wallet thì Oracle tự động mở Wallet, nếu không dùng lệnh sau để đóng và mở Wallet:

    oracleviet@orcl> ALTER SYSTEM SET ENCRYPTION WALLET CLOSE IDENTIFIED BY "password";

     

    System altered.

     

    oracleviet@orcl> ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "password";

     

    System altered.

     

  7. Cấu hình tự động mở Wallet

Để Wallet tự động mở khi khởi động lại máy chủ Oracle, chúng ta phải dùng công cụ Oracle Wallet Manager .

Ví dụ mã hóa TDE

Chúng ta có thể mã hóa dữ liệu ở mức Column hoặc Tablespace:

oracleviet@orcl> create tablespace tde1 datafile size 5M;

 

Tablespace created.

 

oracleviet@orcl> CREATE TABLESPACE tde2 DATAFILE SIZE 5M

ENCRYPTION USING 'AES256'

DEFAULT STORAGE(ENCRYPT);  2    3

 

Tablespace created.

 

oracleviet@orcl> create table t1 (x varchar2(50), y number) tablespace tde1;

 

Table created.

 

oracleviet@orcl> create table t2 (x varchar2(50), y number) tablespace tde2;

 

Table created.

 

oracleviet@orcl> alter table t1 modify (x encrypt);

 

Table altered.

 

oracleviet@orcl> set serveroutput on

oracleviet@orcl> exec pt('SELECT * FROM V$ENCRYPTION_WALLET');

WRL_TYPE                      : file

WRL_PARAMETER                 : /u01/app/oracle/product/11.2.0/dbhome_1/wallet

STATUS                        : OPEN

-----------------

 

PL/SQL procedure successfully completed.

 

oracleviet@orcl> exec pt('SELECT * FROM DBA_ENCRYPTED_COLUMNS');

OWNER                         : ORACLEVIET

TABLE_NAME                    : T1

COLUMN_NAME                   : X

ENCRYPTION_ALG                : AES 192 bits key

SALT                          : YES

INTEGRITY_ALG                 : SHA-1

-----------------

 

PL/SQL procedure successfully completed.

 

oracleviet@orcl> select tablespace_name, encrypted from dba_tablespaces where tablespace_name like 'TDE%';

 

TABLESPACE_NAME                ENC

------------------------------ ---

TDE1                           NO

TDE2                           YES

 

 

Khi ghi dữ liệu vào bảng không mã hóa thì chúng ta vẫn xem được dữ liệu bản rõ trong Datafile, với bảng mã hóa thì không xem được:

 

oracleviet@orcl>

oracleviet@orcl> alter table t1 modify (x decrypt);

Table altered.

 

oracleviet@orcl> insert into t1 values('1111111111',1);

 

1 row created.

 

oracleviet@orcl> insert into t2 values('2222222222',2);

 

1 row created.

 

oracleviet@orcl> commit;

 

Commit complete.

 

oracleviet@orcl> alter system checkpoint;

 

System altered.

 

oracleviet@orcl> col file_name format a80

oracleviet@orcl> set linesize 200

oracleviet@orcl> select file_name from dba_data_files where tablespace_Name='TDE1';

 

FILE_NAME

--------------------------------------------------------------------------------

/u01/app/oracle/oradata/ORCL/datafile/o1_mf_tde1_7bz0wo1f_.dbf

 

oracleviet@orcl> !strings /u01/app/oracle/oradata/ORCL/datafile/o1_mf_tde1_7bz0wo1f_.dbf | grep 1111

1111111111

 

oracleviet@orcl> select file_name from dba_data_files where tablespace_Name='TDE2';

 

FILE_NAME

--------------------------------------------------------------------------------

/u01/app/oracle/oradata/ORCL/datafile/o1_mf_tde2_7bz103wo_.dbf

 

 

oracleviet@orcl> !strings /u01/app/oracle/oradata/ORCL/datafile/o1_mf_tde2_7bz103wo_.dbf | grep 2222

 

oracleviet@orcl>

 

(11/2011 - Sưu tầm: http://oracleviet.blogspot.com/ )

Tham khảo

 

VietPace chuyên cung cấp giải pháp và khóa đào tạo về CNTT&TT, đặc biệt chúng tôi tiên phong về lĩnh vực bảo mật Oracle tại Việt Nam, để biết thêm thông tin xin vui lòng liên hệ tại:

 

 



Copyright 2010, www.vietpace.com, All rights reserved.