网关加密
在数据库和应用之间,串联网关设备,适用于MySQL数据库
加解密在网关设备上
缺点:
不支持模糊查询和关联条件
不支持函数运算
数据量大的情况下,加密的过程会比较长
设备宕机后,业务受影响
优势:
部署简单,只需要更改端口和IP指向
支持国密算法
密钥与数据独立存储,密钥在加密机中,数据在数据库中
列加密
视图+触发器+队列,代理模式
密钥存在加密机中,也会存在数据库中
加解密过程在数据库中进行,加密机宕机不影响业务
表空间加密
需要使用插件,依赖于原数据库的状态
对于数据库端的技术,Oracle在10g的时候就推出了TDE(Transparent Data Encryption,透明数据加密)特性。TDE透明数据加密允许用户对各个表列或整个表空间进行加密。当用户向加密的列中插入数据时,透明数据加密会自动对该数据加密。当用户选择该列时,数据将自动解密。选择完毕后,数据将重新加密
透明数据加密在数据库之外的一个安全模块(即,wallet钱夹)中存储主密钥。
支持的加密算法为:3DES168、AES128、AES192、AES256。
工作过程:
当用户插入数据到需要加密的列中的时候,Oracle 10g从钱夹中获取master密钥,用master密钥解密数据字典中的表密钥(加密密钥),然后用解密后的表密钥(加密密钥)加密输入数据,再将加密后的数据保存在数据库中。
当用户查询一个加密列的时候,Oracle 将加密的表密钥(加密密钥)从数据字典中取出,再取出master密钥,然后解密表密钥(加密密钥),再用解密后的表密钥(加密密钥)来解密磁盘上加密的数据,最后返回明文给用户。
使用这个技术大概分为如下几步:
(1)创建存放主秘钥的文件夹wallet(主密钥用来加密 加密密钥)
(2)修改 sqlnet.ora配置,在sqlnet.ora文件中指定一个wallet路径
(3)创建主秘钥
(4)开启wallet
(5)创建表空间
(6)如果粒度要更细一些的话,可以对表以及表的字段进行Encryption
wallet密码仅仅是登陆owm或进行wallet时需要输入的密码,而master key是存放在wallet中,用于加密解密数据库的加密列或加密表空间。
另外还有一个表密钥,如果一个表有多个列需要进行加密,那么在该表上也只会生成一个表级密钥,当前段用户从该表中取回数据时,会首先取出表密钥然后再取出存在wallet中的master key进行对表密钥的解密,最后用解密后的表密钥去解密加密的列或表空间数据,最终返回明文数据给用户。