首先需要确定你需要加密的列,Oracle 10g数据库将为包含加密列的表创建一个私密的安全加密密钥(表秘钥),
然后采用你指定的加密算法(AES或3DES)加密指定列的明文数据。此时,保护表的加密密钥(表密钥)就非常重要了。
Oracle 10g通过一个master密钥来对表密钥进行加密。master密钥保存在一个叫做“钱夹(wallet)”的安全的地方,
钱夹可以是数据库服务器上的一个文件,加密的表密钥保存在数据字典中。
当用户插入数据到需要加密的列中的时候,Oracle 10g从钱夹中获取master密钥,用master密钥解密数据字典中的表密钥,
然后用解密后的表密钥加密输入数据,再将加密后的数据保存在数据库中。如下图所示:
你可以加密表的部分或者所有列,例如一个表有4列,如上图所示,第2列和第3列被加密,但Oracle只会生成
一个表级的加密密钥,然后用这个密钥加密所有的加密列。在磁盘上,第1列和第4列是明文存储的,第2列和第3列是
加密存储的。由于数据是加密存储的,所有后续的组建例如备份和归档日志,都是加密的格式。
当用户查询一个加密列的时候,Oracle 10g透明的将加密的表密钥从数据字典中取出,再取出master密钥,
然后解密表密钥,再用解密后的表密钥来解密磁盘上加密的数据,最后返回明文给用户。
通过这种加密数据的方式,即使保存在磁盘上的数据被盗,由于master密钥并没有被盗,没有master密钥的情况下,
数据无法被获取。即使“钱夹(wallet)”被盗,如果没有钱夹密码master密钥还是无法获取。因此,即使窃贼盗取了
磁盘或者数据文件的拷贝,也无法解密数据。这样做满足了很多规则和指南的要求,而所有的这些并不需要修改应用程序或
者编写复杂的加密和密钥管理系统。
注意:
- TDE涉及3个密码,一个是钱夹密码,用来启动钱夹;一个是master密钥,用来加解密表密钥;一个是表密钥,用来加解密数据,钱夹密码是用户手工输入的,master密钥和表密钥是系统管理的
- 目前只有Oracle和微软的SQL Server支持TDE