您的位置 首页 java

详解Oracle 透明数据加密–列加密(wallet)

概述

最近有个需求是需要把某列声明成加密的,剩下的全部由Oracle完成。当用户插入或者更新数据时,列值会被截获、加密,然后用加密后的格式保存。然后,当这一列被查询时,又会自动对列值进行解密,然后把解密后的文本(明文)返回给用户。用户甚至都不需要知道发生过加密和解密——也就是所谓的透明。全部都是由Oracle代码内部完成,不需要任何触发器或者复杂的过程逻辑。

那么,这个怎么实现呢?下面用实例来演示下:


TDE

1、概念

TDE的目的:用最小的代价加密敏感数据,避免可能的对数据文件的盗窃带来的破坏。不过,注意,强调的重点是透明——也就是说,加密是自动进行的,解密也一样。在数据库中。Oracle不会区分用户。当一个用户具有查询对象的权限时,Oracle都会明文给出数据值

TDE总共有三层加密,第一层,wallet密钥的验证密码,这个值是人工设置的密码,第二层wallet密钥,第三层,表密钥,所以只要任何一层没被窃取,你的数据都是相对安全的。

详解Oracle 透明数据加密--列加密(wallet)

2、使用限制

  • 不能在 主键 , 外键 列使用TDE
  • 对于使用了TDE的列我们只能创建b树 索引
  • 大对象数据类型不可以使用, BLOB ,CLOB
  • import/ export
  • 其他直接访问数据库数据文件的工具不可以使用

3、支持的加密算法

详解Oracle 透明数据加密--列加密(wallet)

4、支持加密的数据类型

  • CHAR
  • DATE
  • INTERVAL DAY TO SECOND
  • INTERVAL YEAR TO MONTH
  • NCHAR
  • NUMBER
  • NVARCHAR2
  • RAW
  • TIMESTAMP (includes TIMESTAMP WITH TIME ZONE and TIMESTAMP WITH LOCAL TIME ZONE)
  • VARCHAR2

5、参考命令说明

详解Oracle 透明数据加密--列加密(wallet)


实例演示

1、先要创建一个“wallet钱包”,这个钱包里面保存着密钥,Oracle就是通过这个密钥对列进行加密和解密的。

mkdir -p /home/oracle/app/oracle/wallet
 

2、生成wallet钱包之前先要设定wallet钱包的保存位置

设置wallet钱包位置的文件$ORACLE_HOME/network/admin/ SQL net.ora

ENCRYPTION_WALLET_LOCATION=(
 SOURCE=(
 (METHOD=FILE)
 (METHOD_DATA=(DIRECTORY=/home/oracle/app/oracle/wallet))
 )
)
 

3、数据库里创建wallet并且设置访问密码

alter system set encryption key authenticated by "123456";
 

4、创建带有加密列的表,插入相关数据

create table scott.en_test (id int,name varchar(20),salary number(10,2) encrypt using 'AES256');
insert into scott.en_test values(1,'hwb',50000.00);
insert into scott.en_test values(2,'hwb2',30000.00);
 

5、设置了密码后可以手动打开或者关闭wallet

打开wallet

alter system set encryption wallet open authenticated by "123456";
 

关闭wallet

--11g关闭也需要口令
alter system set wallet close identified by "123456";
 

6、关闭wallet查看加密列

如果有查询权限,不加密的列可以查询,加密的无法查询,必须打开wallet才可以

SQL> alter system set wallet close identified by "123456";
SQL> select wrl_type,wrl_parameter,status from gv$encryption_wallet;
SQL> desc scott.en_test;
SQL> select id,name from scott.en_test;
SQL> select SALARY from scott.en_test;
 

7、打开wallet,可以正常访问加密列

SQL> alter system set encryption wallet open authenticated by "123456";
SQL> select SALARY from scott.en_test;
 

8、 数据字典 查看那些列被加密

select * from dba_encrypted_columns;
 
详解Oracle 透明数据加密--列加密(wallet)


这个在银行和金融行业还是比较多用到的,大家有空也可以自己测试一下。后面会分享更多devops和DBA方面内容,感兴趣的朋友可以关注下!

文章来源:智云一二三科技

文章标题:详解Oracle 透明数据加密–列加密(wallet)

文章地址:https://www.zhihuclub.com/189366.shtml

关于作者: 智云科技

热门文章

网站地图