[Oracle] 数据库安全之 - 透明数据加密技术(TDE)

关于数据加密的原理,可以参考《[数据安全]谈谈密码学的数学原理》http://blog.csdn.net/u010415792/article/details/9007931。如何加密的技术都源自这里,在了解具体即时之前,一定要先了解公钥密钥的原理,知其然,也要知其所以然。


Oracle TDE的全称是Transparent Data Encryption 透明数据加密,从10gr2开始支持基于列的加密,从11g开始支持基于表空间的加密。它的优点是对应用透明,管理简便,无需应用设置,但它也有如下限制:

– 只能使用B-Tree索引
– 加密的列无法对索引进行rang scan操作。
– 外部对象
– 可传输表空间
– exp/imp操作

TDE - 基于列的加密

由于有了Oracle的TDE-基于列的加密,你所要做的只是定义需要加密的列,Oracle将为包含加密列的表创建一个私密的安全加密密钥,然后采用你指定的加密算法加密指定列的明文数据。

TDE支持的加密算法有:
3DES168 AES128  AES192  AES256

下面看一个具体的例子:
1)保证数据库兼容版本高于10gr2
SQL> show parameter compatible

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
compatible                           string      11.2.0.0.0

2)设定wallet的位置(在sqlnet.ora文件中写入如下内容,需要重启数据库才能生效):
ENCRYPTION_WALLET_LOCATION =
 (SOURCE=
   (METHOD=file)
     (METHOD_DATA=
       (DIRECTORY=C:\app\xianzhu\product\11.2.0\wallet)))

3)在wallet里面创建key
SQL> alter system set encryption key authenticated by "myPassword";

系统已更改。

以上命令将会在对应目录下产生wallet

4)创建一个表,对其中某列加密
SQL> create table tde_private(
  2  id number(10) primary key,
  3  info varchar2(50) encrypt using 'AES192'
  4  );

表已创建。

SQL> set line 200
SQL> select * from dba_encrypted_columns;

OWNER            TABLE_NAME                     COLUMN_NAME                    ENCRYPTION_ALG                SAL INTEGRITY_AL
---------------- ------------------------------ ------------------------------ ----------------------------- --- ------------
TEST             TDE_PRIVATE                    INFO                           AES 192 bits key              YES SHA-1

SQL> insert into tde_private values (1, 'This is private info');

已创建 1 行。

SQL> commit;

提交完成。

5)如果关闭wallet,无法访问加密的数据:
SQL> alter system set wallet close identified by "myPassword";

系统已更改。

SQL> select * from tde_private;
select * from tde_private
              *
第 1 行出现错误:
ORA-28365: Wallet 未打开

6)重新打开wallet,才可以访问加密的数据:
SQL> alter system set wallet open identified by "myPassword";

系统已更改。

SQL> select * from tde_private;

        ID INFO
---------- --------------------------------------------------
         1 This is private info

TDE - 基于表空间的加密

这是Oracle 11g推出的新特性,它是对整个表空间进行加密。
下面是创建一个加密表空间的语句:
SQL> create tablespace encrypted_ts encryption using 'AES256' default storage(encrypt);

表空间已创建。

SQL> select tablespace_name,encrypted from dba_tablespaces where tablespace_name='ENCRYPTED_TS';

TABLESPACE_NAME                ENC
------------------------------ ---
ENCRYPTED_TS                   YES

加密字段 V.S. 加密表空间

  • 表空间加密 是放生在数据存储的时候,也就是存储在文件上的数据已经被加密;字段加密发生在SQL层,由SQL调用一个算法对数据进行加密处理。
  • 表空间加密的数据,不会再收到字段加密的限制,比如:
– 字段类型
– 索引类型
– 需要 no salt常见索引
  •  加密表空间的限制
– 外部大对象(bfiles)不可以
– exp/imp不行,需要用expdp/impdp

你可能感兴趣的:(oracle,数据安全,TDE,透明数据加密)