oracle 10g 11g 透明数据加密(Transparent Data Encryption)
来源:互联网 发布:mac设置目标磁盘模式 编辑:程序博客网 时间:2024/05/16 13:43
Oracle TDE的全称是Transparent Data Encryption 透明数据加密,从10gr2开始支持基于列的加密,从11g开始支持基于表空间的加密。它的优点是对应用透明,管理简便,无需应用设置,但它也有如下限制:
– 只能使用B-Tree索引
– 加密的列无法对索引进行rang scan操作。
– 外部对象
– 可传输表空间
– exp/imp操作
TDE - 基于列的加密
由于有了Oracle的TDE-基于列的加密,你所要做的只是定义需要加密的列,Oracle将为包含加密列的表创建一个私密的安全加密密钥,然后采用你指定的加密算法加密指定列的明文数据。
这个加密,不需要我们写特殊的代码,只要我们制定“需要加密的列”,当用户插入下一行数据的时候,数据库透明的加密数据然后存储加密后的数据。当用户读取数据时,数据库给我们自动解密,也不需要应用程序去修改任何代码。大致就是下面这种语法:
加密存储过程
raw_input RAW(128);
raw_key RAW(128);
encrypted_raw RAW(2048);
-- convert input to raw
encrypted_raw := dbms_crypto.Encrypt(
src => raw_input,
typ => DBMS_CRYPTO.DES_CBC_PKCS5,
key => raw_key);
raw_input RAW(128);
raw_key RAW(128);
encrypted_raw RAW(2048);
-- convert input to raw
encrypted_raw := dbms_crypto.Encrypt(
src => raw_input,
typ => DBMS_CRYPTO.DES_CBC_PKCS5,
key => raw_key);
解密存储过程:
raw_key RAW(128);
encrypted_raw RAW(2048);
decrypted_raw RAW(2048);
decrypted_raw := dbms_crypto.Decrypt(
src => encrypted_raw,
typ => DBMS_CRYPTO.DES_CBC_PKCS5,
key => raw_key);
raw_key RAW(128);
encrypted_raw RAW(2048);
decrypted_raw RAW(2048);
decrypted_raw := dbms_crypto.Decrypt(
src => encrypted_raw,
typ => DBMS_CRYPTO.DES_CBC_PKCS5,
key => raw_key);
TDE支持的加密算法有:
3DES168 AES128 AES192 AES256
保护表的加密密钥(以下称“表密钥”)就显得非常重要了。Oracle 10g通过一个master密钥来对表密钥进行加密。master密钥保存在一个叫做“钱夹(wallet)”的安全的地方,钱夹可以是数据库服务器上的一个文件,加密的表密钥保存在数据字典中。
当用户插入数据到需要加密的列中的时候,Oracle 10g从钱夹中获取master密钥,用master密钥解密数据字典中的表密钥,然后用解密后的表密钥加密输入数据,再将加密后的数据保存在数据库中。同样道理:当查询一个加密列时,Oracle 将加密的表密钥从数据字典中取出,再取出master密钥,然后解密表密钥,再用解密后的表密钥来解密磁盘上加密的数据,最后返回明文给用户。
通过这种加密数据的方式,即使保存在磁盘上的数据被盗,由于master密钥并没有被盗,没有master密钥的情况下,数据无法被获取
即使“钱夹(wallet)”被盗,如果没有钱夹密码(注:TDE涉及3个密码,一个是钱夹密码,用来启动钱夹;一个是master密钥,用来加解密表密钥;一个是表密钥,用来加解密数据,钱夹密码是用户手工输入的,master密钥和表密钥是系统管理的),master密钥还是无法获取。
即使“钱夹(wallet)”被盗,如果没有钱夹密码(注:TDE涉及3个密码,一个是钱夹密码,用来启动钱夹;一个是master密钥,用来加解密表密钥;一个是表密钥,用来加解密数据,钱夹密码是用户手工输入的,master密钥和表密钥是系统管理的),master密钥还是无法获取。
无论是单个列或多个列加密,Oracle只会生成一个表级的加密密钥,然后用这个密钥加密所有的加密列,由于数据是加密存储的,所有后续的组建(如备份和归档日志,都是加密的格式) 都是自动加密
下面看一个具体的例子:
1)保证数据库兼容版本高于10gr2
[sql]
SQL> show parameter compatible
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
compatible string 11.2.0.0.0
2)设定wallet的位置(在sqlnet.ora文件中写入如下内容,需要重启数据库才能生效):
[plain]
ENCRYPTION_WALLET_LOCATION =
(SOURCE=
(METHOD=file)
(METHOD_DATA=
(DIRECTORY=C:\app\xianzhu\product\11.2.0\wallet)))
3)在wallet里面创建key
[sql]
SQL> alter system set encryption key authenticated by "myPassword";
系统已更改。
以上命令将会在对应目录下产生wallet
4)创建一个表,对其中某列加密
[sql]
SQL> create table tde_private(
2 id number(10) primary key,
3 info varchar2(50) encrypt using 'AES192'
4 );
表已创建。
SQL> set line 200
SQL> select * from dba_encrypted_columns;
OWNER TABLE_NAME COLUMN_NAME ENCRYPTION_ALG SAL INTEGRITY_AL
---------------- ------------------------------ ------------------------------ ----------------------------- --- ------------
TEST TDE_PRIVATE INFO AES 192 bits key YES SHA-1
SQL> insert into tde_private values (1, 'This is private info');
已创建 1 行。
SQL> commit;
提交完成。
5)如果关闭wallet,无法访问加密的数据:
[sql]
SQL> alter system set wallet close identified by "myPassword";
系统已更改。
SQL> select * from tde_private;
select * from tde_private
*
第 1 行出现错误:
ORA-28365: Wallet 未打开
6)重新打开wallet,才可以访问加密的数据:
[sql]
SQL> alter system set wallet open identified by "myPassword";
系统已更改。
SQL> select * from tde_private;
ID INFO
---------- --------------------------------------------------
1 This is private info
TDE - 基于表空间的加密
这是Oracle 11g推出的新特性,它是对整个表空间进行加密。
下面是创建一个加密表空间的语句:
[sql]
SQL> create tablespace encrypted_ts encryption using 'AES256' default storage(encrypt);
表空间已创建。
SQL> select tablespace_name,encrypted from dba_tablespaces where tablespace_name='ENCRYPTED_TS';
TABLESPACE_NAME ENC
------------------------------ ---
ENCRYPTED_TS YES
加密字段 V.S. 加密表空间
表空间加密 是放生在数据存储的时候,也就是存储在文件上的数据已经被加密;字段加密发生在SQL层,由SQL调用一个算法对数据进行加密处理。
表空间加密的数据,不会再收到字段加密的限制,比如:
– 字段类型
– 索引类型
– 需要 no salt常见索引
加密表空间的限制
– 外部大对象(bfiles)不可以
– exp/imp不行,需要用expdp/impdp
0 0
- oracle 10g 11g 透明数据加密(Transparent Data Encryption)
- Oracle 11g 新特性 -- Transparent Data Encryption (透明数据加密TDE) 增强 说明
- Oracle Transparent Data Encryption - 透明数据加密
- oracle 11g Transparent Data Encryption
- oracle 11g TDE (transparent data encryption)
- Oracle 10g Transparent Data Encryption examples
- Transparent Data Encryption (TDE) in Oracle 10g Database Release 2
- Using Transparent Database Encryption in Oracle Database 11g
- sqlserver 中使用透明数据加密(Transparent Data Encryption)加密数据库
- Oracle Transparent Data Encryption
- Oracle 10G 新特性--透明数据加密技术(TDE)
- ORACLE-Transparent Data Encryption (TDE)
- Oracle-11g 中使用表空间透明数据加密(TDE)
- 在Oracle 11g Data Guard中实现Connect Time Failover & Transparent Application Failover(TAF)
- SQLServer Transparent Data Encryption
- SQLServer Transparent Data Encryption
- Oracle 11g 透明网关
- Oracle Database 10g / 11g RMAN备份的加密
- Sencha Touch+Phonegap 开发学习笔记之List相关
- 秒杀倒计时JS代码
- assets与res
- Mysql 语句优化
- 恩布企业 IM 安卓端 1.1 发布,全新UI界面
- oracle 10g 11g 透明数据加密(Transparent Data Encryption)
- Cognos仪表盘(三)资料分享
- Python import机制详解
- 循环队列中元素个数怎么算
- Oracle部分工作原理
- 设计模式之适配器模式、外观模式浅析
- C# 计算两个复数之和、差
- 数据存储—NSKeyedArchiver(一)
- Mac OS升级到Yosemite后一些问题