当前位置: 首页 > 工具软件 > wallet > 使用案例 >

ENCRYPTION_WALLET

袁增
2023-12-01

a.创建一个新目录,并修改sqlnet.ora内容将新目录设置为wallet目录。

设置wallet目录方法如下,在文件sqlnet.ora中,按照下面的格式加入信息:

ENCRYPTION_WALLET_LOCATION=

(SOURCE=(METHOD=FILE)

       (METHOD_DATA=

       (DIRECTORY=D:\oracle\product\10.2.0\admin\orcl\ORA_WALLET)))

 

解释:使用TDE的一个重要过程就是对于主加密key的创建管理,数据库文件外的key是存放在称作wallet的目录中。对key的使用,oracle支持多个数据库组件使用相同的wallet,但是Oracle推荐使用单独的wallet来存放主加密key。

ENCRYPTION_WALLET_LOCATION参数的作用就是告知Wallet的实现方式和物理位置。上面我们制定了一个目录路径,作为主加密Key的存放位置。

b.用SYS身份登录数据库,创建master key文件即master key文件即wallet文件,文件名称具体为ewallet.p12。创建该文件的方法如下:

sqlplus /nolog

conn / as SYSDBA

SQL> alter system setencryption key identified by "password";

解释:password是用于打开关闭wallet 的口令,必须满足一定强度。比如:

alter system setencryption key identified by "Qwer1234";

这个操作会生成一个ewallet.p12文件,位于之前指定的目录下。

 

注意,在这里,我们还可以选取PKI的加密方法,来定义master key。如下:

SQL> ALTER SYSTEM SETENCRYPTION KEY "j23lm781098dhb345sm" IDENTIFIED BY"p3812dH9E";

--这定义了PKI(公钥)加密方法,这种方法更强健,当然性能的影响也较大。

 

c.启动、关闭Wallet

Wallet是一种功能,在实际中可以通过命令启动或者关闭Wallet功能。

//打开wallet

alter system setencryption wallet open identified by"password";

SQL> alter system setencryption wallet open identified by "Qwer1234";

注明:打开状态的wallet再次执行本SQL会报ORA-28354: wallet 已经打开

//关闭wallet

alter system setencryption wallet close identified by"password";

SQL> alter system setencryption wallet close identified by "Qwer1234";

 

解释:到此,我们成功配置了Wallet,创建了master key。但是wallet要处于打开状态,才可以使用TDE进行数据加密,请先打开wallet。

 

 

SQL> create table t

 2 ( id number primary key,

 3   namevarchar2(10) ENCRYPT);

Table created

上面的name列,使用了ENCRYPT进行标志,表明需要对这个字段进行加密处理,采用默认的加密配置。

注意:SYS模式下的对象不可以进行加密,因此这个表不可以是SYS模式下,最好是用普通用户HR登录执行上述建表语句。在默认不指定的情况下,Oracle在加密之前,对明文都要进行Salt处理。所谓Salt处理是一种强化加密数据的方法。通过在加密前明文中掺入一个随机字符串,来强化加密层级,防止进行字典攻击和其他类型的破解操作。如果不需要进行Salt处理,就是用No Salt在ENCRYPT后面。

使用Salt是有一些限制的,如果列加密使用了Salt,在对该列进行索引的时候,会报错。在加密算法方面,Oracle也提供了一些非默认加密算法,使用的时候,使用using关键字配合使用。加密方法如下:

1        3DES168

l        AES128

l        AES192 (default)

1        AES256

 下面是一个使用No Salt和指定加密算法的例子。

SQL> create tablet_test

 2 (id number primary key,

 3  agenumber encrypt no salt,

 4  namevarchar2(10) encrypt using '3DES168');

Table created

 

我们先向数据表t中插入一批数据

declare

    inumber;

begin

    for iin 1..10 loop

        insert into t values (i,'Names : '||i);

endloop;

commit;

end;

成功插入数据,并可以实现查询。

SQL> select * from t;

        ID NAME

        1 Names : 1

        2 Names : 2

10 rows selected

似乎和一般的没有差别,但是如果我们关闭了解密Wallet会如何?

//Connected as SYS,关闭wallet

SQL> ALTER SYSTEM SETENCRYPTION WALLET CLOSE;

System altered

//重新连回scott  Connected as scott,查表

SQL> 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 fromt;

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 indexind_t_test_name on t_test(name);

ORA-28338: 无法使用 salt 值加密索引列

SQL> create indexind_t_test_name on t_test(age);

Index created

--相关的数据视图,对于TDE而言,牵扯到的数据字典相对较少,而且容易理解。

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

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

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

 类似资料:

相关阅读

相关文章

相关问答