介绍

10g R2提供了一个新的特性,让你只需要做如下动作:你可以不写一行代码,只需要声明你需要加密某列。当用户插入数据的时候,数据库透明的加密数据然后存储加密后的数据。同样的,当用户读取数据时,数据库自动进行解密。由于加解密操作对应用程序来说都是透明的,不需要应用程序修改代码,因此这个特性就叫做:透明数据加密(TDE)。

简单来说默认不对数据进行TDE加密,数据库中的某些敏感数据是直接可以在操作系统层面进行读取的,方法不进行阐述。

10gR2 可以对指定列进行加密,11g还可以对表空间进行加密。

配置TDE

制定master密钥存放位置(位置TNS_ADMIN变量为准)

vi

$ORACLE_HOME/network/admin/sqlnet.ora

添加如下参数

ENCRYPTION_WALLET_LOCATION=

(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=

/home/oracle/app/oracle/admin/orcl/wallet)))

oracle用户手动创建wallet文件夹

mkdir /home/oracle/app/oracle/admin/orcl/wallet

否则报错ORA-28368: cannot auto-create wallet

创建wallet并在其中装入master密钥

SQL> alter system set key

identified by "oracle";

System altered.

在$ORACLE_BASE/admin/sid/wallet文件夹中生成密钥文件

ewallet.p12

创建wallet后,它将保持打开状态,直到将其关闭,或者重启数据库。

可以检查wallet的状态

col wrl_type format a7

col wrl_parameter format a55

select

wrl_type,wrl_parameter,status from gv$encryption_wallet;

WRL_TYP WRL_PARAMETER

-------

-------------------------------------------------------

STATUS

------------------

file    /home/oracle/app/oracle/admin/orcl/wallet

OPEN

手动打开wallet,打开是需要密码的

alter system set encryption wallet

open identified by  "oracle";

也就是说数据库每次重启都需要安全管理专员手动打开wallet,否则加密数据无法读写。

当然也可以设置自动登录wallet,但是建议在开发或者测试阶段进行。

打开自动登录的方法通过Oracle

wallet Manager

运行owm命令打开图形界面,

打开现有wallet(找到master密钥存放路径)

打开自动登录

在master密钥存放路径中生成一个文件cwallet.sso。

关闭wallet

可以通过手动关闭wallet

alter system set wallet close;

注意10g关闭不需要wallet口令,如果wallet被关闭,所有的加密解密将自动终止。

11g关闭需要wallet口令,语法如下,否则提示ORA-28390:

auto login wallet not open but encryption wallet may be open

alter system set wallet close

identified by "oracle";

另外,如果设置自动登录11g环境下执行关闭命令不需要输入密码

SQL> alter

system set wallet close;

可以执行成功,但是查询gv$encryption_wallet视图,状态依然是OPEN,而不是closed。

此时查询依然可以查询加密内容。

TDE的密钥管理

在对表进行加密时,TDE为每个包含加密字段的表都生成相应的密钥,而不是所有的表都使用相同的密钥。

TDE使用对称密钥技术进行数据加密和解密,性能高。

对于表空间的密钥是存储在数据字典中,前提是它首先使用master密钥对所有的表密钥进行加密。

新表创建加密列

create table

( encrypt [algorithm] [nomac] [no salt]);

[algorithm]加密算法

[nomac] 10.2.0.4才开始有的参数当加密一个列需要额外的20字节存储密文时,将会生成一个消息验证码。

[no salt]) salt通过在明文中插入某个随机值(在TED中为一个16字节的值)能够有效的增强加密算法的强度,避免对加密数据的“明文"攻击。

create table foo (columnA

dataype,columnB dataype encrypt);

该句默认使用192为子长密钥的AES加密算法,使用salt以及一个20位的mac。当然,如果希望某列上用索引,最好不要在其上加入salt。

查看加密列

select

owner,table_name,column_name,encryption_alg,salt from dba_encrypted_columns;

对现有列进行加密

alter table

modify  ( encrypt

['nomac'] [no salt]);

如果数据量比较大,直接对列加密会增加cpu和存储负载,因此可以考虑使用在线重定义的形式重新组织表。(不赘述)

TDE列加密弊端

使用数据修改捕获(无论同步还是异步)、流、物化视图、透明表空间、LOB就不能用了,随着11G引入表空间加密,这一问题得到解决。

加密的列如果使用了salt,则无法在上面创建索引。

因为索引存储的是加密后的值,所以即使不使用salt也只可以使用基于等式匹配的查询,对于范围查询也无能为力。

因为不同表密钥不同,因此除非事先解密数据,否则无法发现PK/FK的关系定义。

表空间加密

表空间加密,其中的所有存储内容都会进行加密。

create tablespace ts_encrypted

datafile

'/home/oracle/app/oracle/oradata/ORCL/datafile/ts_encrypted _d08ww9lb_.dbf'

size 100m autoextend on encryption using 'AES192' default  storage(encrypt);

查询表空间加密

select

ts.name,et.encryptedts,et.encryptionalg from v$tablespace

ts,v$encrypted_tablespaces et where ts.ts#=et.ts#;

列级别加密步骤

1确定待加密的列

2确定tde都能够支持此数据类型

3确定在该列上不存在索引

4确定改了不属于某个PK/FK关系

5对列进行加密

6重新组织表或在线重定义

表空间加密步骤

1确定含有敏感数据的列表

2创建一个新的加密表空间

3使用alert table

customer move tablespace encrypted_customer ;将表移动到新表空间。

4索引需要重建,例如:alter table tde_table1_index1 rebuild tablespace encryptedtbs;

5将表从加密的表空间move到普通表空间,就完成了解密。

11g表空间级透明数据加密的功能提升

相对于10g版本的列级TDE,表空间级TDE提供了更多的灵活性和更好的性能。

下列表格是10g列级TDE和11g表空间级TDE的比较。

列级TDE

表空间级TDE

加密完成在

PGA

Data Block层

在SGA中加密数据的状态

加密的

解密的

支持的索引类型

只支持b-tree索引

支持所有类型索引

支持外键?

不知道外键加密(因为不同的表用不通的key)

支持外键

支持的索引search方式

支持等值search,不知道范围扫描

支持所有类型的search

支持的数据类型

部分

所有

执行计划是否改变

可能

不改变

是否需要增加存储的占用

对其他产品的支持

l  TDE支持Dataguard,

l  TDE不支持传统导出导入exp/imp

l  TDE支持expdp/impdp,可以直接导出,但是会提示ORA-39173 encryptd data has been stored unencrypted in dump file set,表时是明文方式存储在DUMP文件中,可以直接导入。

为了保证导出DUMP的安全也可以在导出时使用ENCRYPTION_PASSWORD参数来对备份文件设置加密口令,导入时只有提供口令密码才能导入数据。

oracle数据透明加密,oracle数据透明加密-TDE相关推荐

  1. 加密数据的检索_透明地持久保存并从数据库中检索加密的数据

    加密数据的检索 自从我在这里发表上一个帖子以来已经有两个多月了,但是今年六月和七月非常忙碌而密集. 首先, Confitura的组织(欧洲最大的Java开发人员免费会议)参加了我所有的免费晚会,然后在 ...

  2. 透明地持久保存并从数据库中检索加密的数据

    自从我在这里发表上一个帖子以来已经有两个多月了,但是今年六月和七月非常忙碌而密集. 首先, Confitura的组织(欧洲最大的Java开发人员免费会议)参加了我所有的免费晚会,然后在相当紧张的住院期 ...

  3. oracle dbms_crypto,Oracle的dbms_obfuscation_toolkit加密解密数据

    oracle从8i开始提供一个数据加密包:dbms_obfuscation_toolkit.利用这个包,我们可以对数据进行DES,Triple DES或者MD5加密. 本文就此讲解如何使用以及使用过程 ...

  4. Oracle数据安全解决方案(1)——透明数据加密TDE

    Oracle数据安全解决方案(1)--透明数据加密TDE 2009年09月23日 22:49:00 华仔爱技术 阅读数:7991 原文地址: http://www.oracle.com/technol ...

  5. 特斯拉被曝储存大量未加密个人数据 | 极客头条

    点击上方↑↑↑蓝字关注我们~ 「2019 Python开发者日」,购票请扫码咨询 ↑↑↑ 编译丨王哲 来源丨猎云网( ID:ilieyun) 编者按:特斯拉是否明确界定了数据安全的目标?它现有的规则又 ...

  6. 如何用ASP.NET加密Cookie数据过程分析

    如何用ASP.NET加密Cookie数据过程呢,这里做个简单的分析. 首先,Cookie数据包含在HTTP请求和响应的包头里透明地自吸泵传递,也就是说聪明的人是能清清楚楚看到这些数据的 其次,Cook ...

  7. 数据分片排序oracle,Oracle数据库的优化

    摘要 本文提出了一种优化Oracle数据库的方法.Oracle中SQL语句的执行过程可分为解析(Parse).执行(Execute)和提取结果(Fetch)三步,此方法就是通过对SQL语句在Oracl ...

  8. 特斯拉被曝储存大量未加密个人数据,你的隐私正在“裸奔”!

    编译丨王哲 责编 | 伍杏玲 本文经授权转载自猎云网(ID:ilieyun) 特斯拉是否明确界定了数据安全的目标?它现有的规则又在保护哪些人? 如果你不幸撞毁了你的特斯拉汽车,那么当它被扔进垃圾场的时 ...

  9. 数据脱敏和加密_数据脱敏和数据加密的区别--工作需要,对其进行了简单的整理...

    转至:https://blog.csdn.net/zfh_0916/article/details/104688307 通过查阅资料,了解数据脱敏和数据加密是两种截然不同的技术,根据不同的应用目的选用 ...

  10. 企业文件加密系统 — 文件透明加密的优势和功能

    网络安全问题一直存在,很多企业担心自己的核心技术遭泄露,于是采取防泄密措施--文件加密系统(防泄密软件)!不过很多首次接触到加密软件的企业管理者来说,对文件加密系统还不是很了解,今天我们来了解一下文件 ...

最新文章

  1. 光耦p621引脚图_开关电源中光耦电路的设计与优点
  2. 测试嵌套JavaScript对象键的存在
  3. cropbox php,jQuery用户头像裁剪插件cropbox.js实例分享
  4. crontab 执行的目录 研究
  5. 基于Huffman算法和LZ77算法的文件压缩的改进方向
  6. wizard generated application - how is detail page rendered
  7. 网络之DNS协议图解
  8. 馒头何瑫写作训练营的学习笔记总结
  9. arcgis10.1连接sqlserver数据库常见问题(转载)
  10. bzoj2243 树链剖分
  11. 【JavaFx】eclipse搭建JavaFx开发环境
  12. RHEL6基础三十七之系统时间修正、GRUB背景图片修改
  13. 指针的意义和linux的内存回收艺术
  14. Nachos操作系统-文件系统添加多级目录
  15. 【嵌入式基础常识】单片机
  16. Python编写三角形
  17. java lifo_java:stack栈: Stack 类表示后进先出(LIFO)的对象堆栈
  18. 透析BAT人工智能生态图谱:AI大战一触即发
  19. 【22物联网国赛样题第一套】lora屏幕显示,外设值获取,lora光照获取,物联网竞赛今年历年国赛样题真题代码
  20. (End)从.net到java,工作流平台的延展

热门文章

  1. Instant类[java]
  2. Java学习笔记——Character类
  3. 做SEO优化应该掌握哪些基础知识
  4. 企业怎么发国际短信?为什么要发国际短信?
  5. 英语常用口语1000句
  6. 阅读笔记:利用Python进行数据分析第2版——第10章 数据聚合与分组运算
  7. 高德地图JSAPI 2.0使用Java代码代替Nginx进行反向代理
  8. wordpress插件_顶级WordPress反垃圾邮件插件
  9. python matplotlib 万花筒画板
  10. 《UNIX环境高级编程》笔记 第十章-信号