IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]TDE on Oracle10.2.0.4

    wonder4发表于 2016-07-31 09:03:32
    love 0

    安装配置TDE
    1、 确定你的版本信息
    TDE是Oracle10gR2中推出的一个新功能,所以在规划使用TDE的时候,要保证你的Oracle版本是在10gR2或者以上。
    下面是笔者测试
    SQL> select * from v$version;
    BANNER
    ---------------------------------------------------------------
    Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
    PL/SQL Release 10.2.0.1.0 - Production
    CORE10.2.0.1.0    Production
    TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
    NLSRTL Version 10.2.0.1.0 - Production
    2、创建一个新目录,并指定为Wallet目录
    使用TDE的一个重要过程就是对于主加密key的创建管理,数据库文件外的key是存放在称作wallet的目录中。对key的使用,oracle支持多个数据库组件使用相同的wallet,但是Oracle推荐使用单独的wallet来存放主加密key。
    设置wallet目录的方法很简单,在参数文件sqlnet.ora中,按照下面的格式加入信息:
    ENCRYPTION_WALLET_LOCATION=
    (SOURCE=(METHOD=FILE)
           (METHOD_DATA=
            (DIRECTORY=D:\oracle\product\10.2.0\admin\orcl\ORA_WALLET)))
    ENCRYPTION_WALLET_LOCATION参数的作用就是告知Wallet的实现方式和物理位置。在上面的实例代码中,我们制定了一个目录路径,作为主加密Key的存放位置。
    3、创建master key文件,指定wallet密码
    使用SYS用户登入系统,建立加密文件。通过命令:
    ALTER SYSTEM SET [ENCRYPTION] KEY IDENTIFIED BY password
    其中,password相当于设置一个wallet密码。Oracle Wallet是一个可以打开关闭的功能组件,设置密码之后,只有通过密码口令可以启用wallet功能。
    SQL> alter system set encryption key identified by "password";
    System altered
    注意,在这里,我们还可以选取一些更强壮的加密方法,来定义master key。如下:
    ALTER SYSTEM SET ENCRYPTION KEY "j23lm781098dhb345sm" IDENTIFIED BY "p3812dH9E";
    上述代码定义了PKI加密方法。
    此时,我们可以发现在设置的目录下,多出一个Personal Information Exchange类型的文件,笔者机器上名称为:ewallet.p12。相当于我们生成的master key文件。
    4、启动、关闭Wallet
    Wallet是一种功能,在实际中可以通过命令启动或者关闭Wallet功能。
    //尝试开启wallet功能,""中包括的是指定的开启密码;
    SQL> ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "password";
    ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "password"
    //因为当前是打开的状态,所以提示错误
    ORA-28354: wallet 已经打开
    //关闭Wallet
    SQL> ALTER SYSTEM SET ENCRYPTION WALLET CLOSE;
    System altered
    SQL> ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "password";
    System altered
    到此,我们成功配置了Wallet,创建了master key。下面我们看如何使用TDE进行数据加密。


    加密数据列
    对数据列加密是TDE一个常用的功能。我们常常需要对数据库中某个表的某个敏感数据进行加密处理,防止信息的外泄。
    首先,在定义数据表中的数据列(或者修改数据列)的时候,使用ENCRYPT进行标注。表示这个字段是使用加密保护的重要字典。

    /

    SQL> create table t
     2 ( id number primary key,
     3   name varchar2(10) ENCRYPT);
    Table created
    上面的name列,使用了ENCRYPT进行标志,表明需要对这个字段进行加密处理,采用默认的加密配置。
    注意:在默认不指定的情况下,Oracle在加密之前,对明文都要进行salt处理。所谓salt处理是一种强化加密数据的方法。通过在加密前明文中掺入一个随机字符串,来强化加密层级,防止进行字典攻击和其他类型的破解操作。如果不需要进行salt处理,就是用No Salt在ENCRYPT后面。
    使用salt是有一些限制的,如果列加密使用了salt,在对该列进行索引的时候,会报错。
    在加密算法方面,Oracle也提供了一些非默认加密算法,使用的时候,使用using关键字配合使用。加密方法如下:
    l        3DES168
    l        AES128
    l        AES192 (default)
    l        AES256
     下面是一个使用No Salt和指定加密算法的例子。
    SQL> create table t_test
     2 (id number primary key,
     3  age number encrypt no salt,
    4  name varchar2(10) encrypt using '3DES168');
    Table created
    如果要对一个已经加密处理的数据列,解除加密,使用alter table…和DECRYPT关键字就可以实现,这里不加以累述。
    使用数据加密列
    我们先向数据表t中插入一批数据
    declare
     i number;
    begin
     for i in 1..10 loop
       insert into t
      values (i,'Names : '||i);

    end loop;
    commit;
    end ;
    成功插入数据,并可以实现查询。
    SQL> select * from t;
           ID NAME
            1 Names : 1
            2 Names : 2
    10 rows selected
    似乎和一般的没有差别,但是如果我们关闭了解密Wallet会如何?
    Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0
    Connected as SYS
    //关闭Wallet
    SQL> ALTER SYSTEM SET ENCRYPTION WALLET CLOSE;
    System altered
    //重新连回scott
    SQL> conn ;
    Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0
    Connected as scott
    //报错
    SQL> select * from t;
    select * from t
    ORA-28365: Wallet 未打开
    //能够查找到数目
    SQL> select count(*) from t;
     COUNT(*)
    ---------
          10
    //非加密字段没有问题
    SQL> select id from t;
          ID
            1
            2

    10 rows selected
    //加密字段
    SQL> select name from t;
    select name from t
    ORA-28365: Wallet 未打开
    从上面的例子看,TDE的作用就是最大限度的保护加密字段,防止非法被访问。
    最后我们看看salt对索引的影响。
    SQL> desc t_test;
    Name Type        Nullable Default Comments
    ID  NUMBER                               

    AGE NUMBER      Y                        //no salt
    NAME VARCHAR2(10) Y                        //salt
    SQL> create index ind_t_test_name on t_test(name);
    create index ind_t_test_name on t_test(name)
    ORA-28338: 无法使用 salt 值加密索引列
    SQL> create index ind_t_test_name on t_test(age);
    Index created
    相关的数据视图
    对于TDE而言,牵扯到的数据字典相对较少,而且容易理解。

    l        dba_encrypted_columns:记录所有的加密字段;

    l        all_encrypted_columns:记录当前用户所能访问到的所有加密字段;

    l        user_encrypted_columns:记录当前用户自身Schema所有的加密字段;



沪ICP备19023445号-2号
友情链接