最近几年发生了很多脱库的事件,有些时候安全不到位脱库再所避免,但是可以通过某些技术对数据库进行加密,让即使通过脱库得到的库也没法查看。

在技术层面的实现可以分为应用和数据库层。

(1)通过在程序端对某些敏感的信息就进行加密进行存放

(2)通过在数据库端对库进行加密存放

对于数据库端的技术,Oracle在10g的时候就推出了TDE(Transparent Data Encryption,透明数据加密)特性。这个特性简单来说就是对存放的数据再加了一道壳,脱库拿到的数据库其实是加了这个壳的,拿到也没啥用,除非把这个壳再进行破解。这个壳Oracle给出了这几种加密算法:3DES168、AES128、AES192、AES256。

使用这个技术大概分为如下几步:

(1)创建存放壳秘钥的文件夹

(2)修改 sqlnet.ora配置,在sqlnet.ora文件中指定一个wallet路径

(3)创建主秘钥

(4)开启wallet

(5)创建表空间

(6)如果粒度要更细一些的话,可以对表以及表的字段进行Encryption

使用步骤:

1.创建目录
mkdir -p $ORACLE_BASE/admin/orcl/wallet

2.在sqlnet.ora中添加如下
ENCRYPTION_WALLET_LOCATION = (SOURCE =
(METHOD = FILE)
(METHOD_DATA =
(DIRECTORY =/u01/app/oracle/admin/orcl/wallet)))

3.创建主秘钥
ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY password;

4.数据库如果重启之后,秘钥是会被关闭的,用如下命令可以打开秘钥
ALTER SYSTEM SET [ENCRYPTION] WALLET OPEN IDENTIFIED BY password

5.创建表空间
CREATE TABLESPACE securespace
DATAFILE '/u01/app/oracle/oradata/orcl/secure01.dbf' SIZE 100M
ENCRYPTION USING 'AES256'
DEFAULT STORAGE(ENCRYPT);

6.剩下的就是使用
如果需要使用这个特性就可以把表创建在这个表空间上了。对于已经存在的表,可以使用alter table move tablespace的方式进行move(要记得索引也需要rebuild)。

7.需要注意的:

wallet密码跟我们这里要修改的master key不是一个东西,wallet密码仅仅是登陆owm或进行wallet时需要输入的密码,而master key是存放在wallet中,用于加密解密数据库的加密列或加密表空间。

另外还有一个表密钥,如果一个表有多个列需要进行加密,那么在该表上也只会生成一个表级密钥,当前段用户从该表中取回数据时,会首先取出表密钥然后再取出存在wallet中的master key进行对表密钥的解密,最后用解密后的表密钥去解密加密的列或表空间数据,最终返回明文数据给用户。


测试:

在这儿做一个效果测试,测试的步骤为创建2个表空间(一个为加密的一个为不加密的),创建2个用户默认的表空间对应这2个表空间,然后分别登陆2个用户,创建同样的表,插入数据,然后最后再操作系统上来看,看能否通过操作系统的命令看到插入的数据。

1.创建加密的表空间sec_yes

SQL> create tablespace sec_yes datafile '/u01/app/oracle/oradata/orcl/secyes01.dbf' size 20M
2 ENCRYPTION USING 'AES256'
3 DEFAULT STORAGE(ENCRYPT);

Tablespace created.

2.创建不加密的表空间sec_no

SQL> create tablespace sec_no datafile '/u01/app/oracle/oradata/orcl/secno01.dbf' size 20M;

Tablespace created.

3.创建用户test1默认表空间为sec_yes

SQL> create user test1 identified by test1 default tablespace sec_yes;

User created.

4.创建用户test2认表空间为sec_no

SQL> create user test2 identified by test2 default tablespace sec_no;

User created.

SQL>

[oracle@test admin]$ sqlplus / as sysdba

SQL*Plus: Release 11.1.0.7.0 - Production on Tue Feb 16 17:12:14 2016

Copyright (c) 1982, 2008, Oracle. All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

5.登陆用户test1创建表并插入数据

SQL> conn test1/test1
Connected.

SQL> create table test1 (remark varchar2(20));

Table created.

SQL> insert into test1 values ('show me the money');

1 row created.

SQL> commit;

Commit complete.

6.登陆用户test2创建表并插入数据

SQL> conn test2/test2
Connected.
SQL> create table test2 (remark varchar2(20));

Table created.

SQL> insert into test2 values ('show me the money');

1 row created.

SQL> commit;

Commit complete.

7.将脏数据写入到磁盘

SQL> ALTER SYSTEM FLUSH BUFFER_CACHE;

System altered.

SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

8.进入到存放数据文件的地方,用strings命令看能否查看到数据
[oracle@test admin]$ cd /u01/app/oracle/oradata/
[oracle@test oradata]$ ls
orcl
[oracle@test oradata]$ cd orcl/
[oracle@test orcl]$ ls
control01.ctl control03.ctl redo01.log redo03.log secyes01.dbf system01.dbf undotbs01.dbf
control02.ctl example01.dbf redo02.log secno01.dbf sysaux01.dbf temp01.dbf users01.dbf
[oracle@test orcl]$ strings secyes01.dbf | grep "show"
[oracle@test orcl]$ strings secno01.dbf | grep "show"
show me the money
[oracle@test orcl]$

可以看到没有加密的表空间能看到存入的数据,而加密了的表空间则看不到。

Oracle“钱夹”的使用的更多相关文章

  1. Oracle中对列加密的方法

    Oracle中对列加密的方法 2011-12-22 17:21:13 分类: Linux Oracle支持多种列加密方式: 1,透明数据加密(TDE):create table encrypt_col ...

  2. oracle TDE

    转自:oracle TDE学习系列 (1) — wallet 使用管理 关于oracle wallet,通常称为oracle钱夹,说的通俗一点,oracle wallet是一个用 口令加密的PKCS# ...

  3. Oracle 数据库加密

    数据加密 动态数据(data in motion)和静态数据(data at rest),除了手动加密,其他的加密都需要oracle企业版的高级加密(额外收费——)  1 静态数据加密 Example ...

  4. Oracle RMAN 学习:演练进阶篇

    Oracle RMAN 学习:演练进阶篇 5 Rman备份演练进阶篇 5.1 是否选择增量备份 Backup命令生成的备份集中只备份了那些使用了的数据块,备份集实际大小已经较目标数据库的数据文件小了很 ...

  5. 透明数据加密 (TDE)常见问题解答

    透明数据加密 (TDE)常见问题解答问题任何人只要有权访问加密数据就能对其进行解密吗?TDE 会带来哪些开销?哪些加密算法可与 TDE 一同使用?可以使用第三方加密算法代替 TDE 提供的算法吗?可以 ...

  6. oracle技巧-持续更新

    1. 登录oracle数据库,执行select status from v$encryption_wallet,如果返回OPEN,表示钱夹已自动打开. 2.

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

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

  8. ORACLE透明加密

    --官网文档:https://www.oracle.com/technetwork/cn/tutorials/tde-096009-zhs.html#t概述Oracle 数据库 10g 第 2 版透明 ...

  9. oracle加密--wallet

    SQL> SELECT * FROM V$ENCRYPTION_WALLET; WRL_TYPE WRL_PARAMETER STATUS -------------------- ------ ...

随机推荐

  1. js中数组去除重复项目

    js语法技巧:if(a>=5)  alert();  可以改写成下边语句:  a>=5&&alert(); 在下文中会用到这种写法 // for循环删除后面重复的 速度最快 ...

  2. 【09-26】hibernate学习笔记

    主键生成策略 @Id //根据底层数据库决定,mysql-->auto_increment @GeneratedValue(strategy=GenerationType.AUTO) //使用数 ...

  3. 2016百度之星 初赛2A ABEF

    只做了1001 1002 1005 1006.剩下2题可能以后补? http://acm.hdu.edu.cn/search.php?field=problem&key=2016%22%B0% ...

  4. Android之下拉刷新的ListView

    不废话,代码里面注释很详细,直接上代码: 自定义的RefreshableListView代码: public class RefreshableListView extends ListView im ...

  5. WebApp开发之--"rem"单位

    随着web app的兴起,rem这是个低调的css单位,近一两年开始崭露头角,有许多朋友对于它的评价不一,有的在尝试使用,有的在使用过程中遇到坑就弃用了.但是我认为rem是用来做web app它绝对是 ...

  6. 使用CSS隐藏HTML元素的4种常用方法

    现在的网页设计越来越动态化,我们经常需要隐藏某些元素,在特定的时候才显示它们.我们通常可以使用4种方法来隐藏和显示元素. 这4种显示和隐藏元素的技术各自有它们自己的优点的缺点,下面来举例说明. 在这篇 ...

  7. jQuery判断及更改checkbox状态

    判断:jquery对象.prop("checked") 选中:jquery对象.prop("checked", true) 取消选中:jquery对象.remo ...

  8. 耿丹CS16-2班第二次作业汇总

    -- Deadline: 2016-09-28 12:00 -- 作业内容:http://www.cnblogs.com/huangjunlian/p/5891726.html -- 第二次作业总结: ...

  9. Android实现双击事件的两种方式

    Work around的方法是先监听onTouch事件来监听连续点击次数,每次点击都布置一个间隔时间的延时任务,延时任务执行时判断间隔内是否还有点击,如果没有则发布点击次数,重置计数. 实现代码如下: ...

  10. 重视blog备份——兼记我与CSDN的爱恨情仇

    痛定思痛,终于决定--逐渐备份.迁移CSDN博客到"博客园". 缘起 前几年比较喜欢逛csdn的bbs,虽然之前在cnblogs也注册了账号,但一直用CSDN博客比较多.本来一直用 ...