Oracle Transparent Data Encryption 透明加密实践

梁铭图 2022-03-12 16:37:00

作者介绍

梁铭图,新炬网络首席架构师。具有十余年数据库运维、数据库设计、数据治理以及系统规划建设经验,拥有Oracle OCM和ACE Director、Togaf企业架构师(鉴定级)、IBM CATE等认证,曾获dbaplus年度MVP、华为云MVP等荣誉,并参与数据资产管理国家标准的编写工作。在数据库运维管理和架构设计、运维体系规划、数据资产管理方面有深入研究。

 

最近在参与一些关于数据库安全的行业标准的撰写,与许多数据库同行讨论到数据库加密的问题,分别讨论到数据库的文件加密、备份加密、通信加密和导出加密等话题,不由得回想起其实Oracle很久之间已经实现了相关的加密实现。

 

Oracle TDE简介

 

TDE透明数据加密允许用户对各个表列或整个表空间进行加密。当用户向加密的列中插入数据时,透明数据加密会自动对该数据加密。当用户选择该列时,数据将自动解密。选择完毕后,数据将重新加密。

 

  • TDE不需要额外安装。

  • 所有步骤可以使用SQL命令或者图形界面完成。

  • 对数据库功相关能透明(rman、压缩等),不需要额外操作。



 

Oracle TDE配置步骤

 

创建“wallet”目录以及指定位置

 

默认情况下,钱夹创建于ORACLE_BASE/admin/ORACLE_SID/wallett目录下。如果没有,则手工创建。也可以修改该目录路径,但需要在sqlnet.ora文件进行配置。


设置wallet密码

打开wallet钱夹

可以看到,设置完wallet密码后,wallet默认就是打开的。需要注意的是wallet的密码一旦生成之后,每次数据库重启之后,都必须使用命令显式打开。并且wallet一旦打开之后,在数据库实例关闭之前会一直处于打开状况,除非显式的通过close命令关闭。

 

 

Oracle TDE加密列使用

 

加密列方法

 

举例测试,有一张表ttt上有个字段已经加密。

关闭wallet,包含加密列的查询失败。

但如果查询不包含加密列,可以成功。

open wallet后,加密列可以查询。

 

加密列常见修改方式

 

增加一加密的列

 

  •  
ALTER TABLE ttt ADD (aaa VARCHAR2(128) ENCRYPT);

 

修改普通列为加密列

 

  •  
ALTER TABLE ttt MODIFY (USER_ID ENCRYPT);

 

取消加密列

 

  •  
ALTER TABLE ttt MODIFY (USER_ID DECRYPT);

 

加密列支持的字段类型

 

Oracle官方支持列加密的字段类型有如下几种:

 

• BINARY_DOUBLE 

• BINARY_FLOAT 

• CHAR 

• DATE 

• INTERVAL DAY TO SECOND 

• INTERVAL YEAR TO MONTH 

• LOBs (Internal LOBs and SECUREFILE LOBs Only) 

• NCHAR 

• NUMBER 

• NVARCHAR2 

• RAW 

• TIMESTAMP (includes TIMESTAMP WITH TIME ZONE and TIMESTAMP WITH LOCAL TIME ZONE) 

• VARCHAR2

 

表空间加密

 

当许多表或者整个数据库的安全级别都比较高时,可以考虑将以表空间为单位进行加密,避免繁琐的维护动作,如:

在加密表空间内创建表

字段上没有加密属性。

 

验证表是否加密

关闭wallet,无法查询加密表。

打开wallet后,可以查询加密表。

 

Wallet密码修改

 

wallet密码可以通过orapki命令进行修改

 

  •  
orapki wallet change_pwd -wallet wallet_location[-oldpwd password ] [-newpwd password]

 

示例:

wallet密码也可以通过图形界面修改,不做示例了。

 

wallet自动登录

 

使用SQL 创建的wallet 的问题是不能自动登陆,这样我们在关闭wallet或者重启实例后,都需要手动的来open wallet。不过Oracle 提供了wallet 自动登陆功能,可以在创建后使用owm(Oracle wallet manager)来修改。

 

在oracle用户终端输入own命令调出gui界面,使用owm工具修改。

这个功能对运维人员来说相当实用。

 

小结

 

TDE可以对也可以对expdp,rman,compress等功能适用,这里就不一一测试了。使用场景更偏向于数据的安全。隐藏敏感数据,不被人知晓,更多的时候是防止数据库上的数据文件以及备份被”偷窃“之后的数据泄密。

 

使用场景,可以对一些敏感数据进行加密(信用卡和帐户号码、地址、姓名和个人身份号码(驾驶证,身份证)),或者对关键数据进行加密,如薪水、研究结果、客户信息等。

 

如需要对外键列中的数据进行加密,或者需要除 B-TREE 树外的索引,又或者需要对列级TDE 不支持的数据类型进行加密,可选择表空间级别加密。

最新评论
访客 2023年08月20日

230721

访客 2023年08月16日

1、导入Mongo Monitor监控工具表结构(mongo_monitor…

访客 2023年08月04日

上面提到: 在问题描述的架构图中我们可以看到,Click…

访客 2023年07月19日

PMM不香吗?

访客 2023年06月20日

如今看都很棒

活动预告