现在的位置: 首页 > 综合 > 正文

数据库备份介质的加密(encryption,Wallet)

2014年09月05日 ⁄ 综合 ⁄ 共 7900字 ⁄ 字号 评论关闭

          数据库的资料泄密不是管好数据库的登录用户口令之类就可以了的。如果忽视了备份介质的存放,
  别人在得到备份后,如果还原,不就能得到所有资料了。
  所以如果数据真的很重要,把备份加密起来,也是多了一种数据保护措施,再说通过测试,发现Oracle设这个
  也是很方便的。
     
--===============================
测试一:

1. 准备好测试用的表空间
    CREATE TABLESPACE TBS_PWD DATAFILE 'C:\ORACLE\ORADATA\XCLDB\TBS_PWD01.DBF' SIZE 5m ;

2.打开加密
  configure encryption for database on;
  set encryption on identified by 'xcl' only;

3.开始备份,发现原来Wallet没打开    

RMAN> backup tablespace tbs_pwd;


启动 backup 于 05-3月 -14
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=35 设备类型=DISK
通道 ORA_DISK_1: 正在启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集内的数据文件
输入数据文件: 文件号=00010 名称=C:\ORACLE\ORADATA\XCLDB\TBS_PWD01.DBF
通道 ORA_DISK_1: 正在启动段 1 于 05-3月 -14
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: backup 命令 (ORA_DISK_1 通道上, 在 03/05/2014 11:49:23 上) 失败
ORA-19914: 无法加密备份
ORA-28365: Wallet 未打开

4.尝试打开,噢,原来这个库还没创建  

RMAN>  sql 'alter system set wallet open identified by "xcl"';


sql 语句: alter system set wallet open identified by "xcl"
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: sql 命令 (default 通道上, 在 03/05/2014 11:52:19 上) 失败
RMAN-11003: 在分析/执行 SQL 语句期间失败: alter system set wallet open identified by "xcl"
ORA-28367: wallet 不存在

5. 创建Wallet,并设置密码.
  a. 新建目录:
     C:\oracle\admin\xcldb\wallet
  b.找到sqlnet.ora
    加上Wallet的配置 
  ENCRYPTION_WALLET_LOCATION=
(SOURCE=(METHOD=FILE) (METHOD_DATA=(DIRECTORY=C:\oracle\admin\xcldb\wallet)))

  如果是UNIX/Linux :
    su - oracle
    mkdir -p $ORACLE_BASE/oradata/$ORACLE_SID/wallet
    chmod -R 750 $ORACLE_BASE/oradata/$ORACLE_SID/wallet

 c.设置密码

RMAN> sql 'alter system set encryption key identified by "xcl"';


	sql 语句: alter system set encryption key identified by "xcl"


执行完成后,会在C:\oracle\admin\xcldb\wallet生成一个文件
ewallet.p12

6. 备份表空间   

RMAN> backup tablespace tbs_pwd;


启动 backup 于 05-3月 -14
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=223 设备类型=DISK
通道 ORA_DISK_1: 正在启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集内的数据文件
输入数据文件: 文件号=00010 名称=C:\ORACLE\ORADATA\XCLDB\TBS_PWD01.DBF
通道 ORA_DISK_1: 正在启动段 1 于 05-3月 -14
通道 ORA_DISK_1: 已完成段 1 于 05-3月 -14
段句柄=C:\ORACLE\PRODUCT\11.2.0\DBHOME_1\DATABASE\05P2DUK3_1_1 标记=TAG20140305T142819 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:01
完成 backup 于 05-3月 -14

7. 关库,破坏,启动
  a.关库    

RMAN> shutdown immediate;


数据库已关闭
数据库已卸装
Oracle 实例已关闭

  b. 删除tbs_pwd表空间的数据文件
  c.启动   

RMAN> startup


已连接到目标数据库 (未启动)
Oracle 实例已启动
数据库已装载
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: startup 命令 (在 03/05/2014 14:54:49 上) 失败
ORA-01157: 无法标识/锁定数据文件 10 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 10: 'C:\ORACLE\ORADATA\XCLDB\TBS_PWD01.DBF'

8.尝试还原,发现Wallet没打开,原来每次数据库启动,都要手工打开Wallet.

   a. 尝试还原      

RMAN> restore tablespace tbs_pwd;


启动 restore 于 05-3月 -14
使用通道 ORA_DISK_1


通道 ORA_DISK_1: 正在开始还原数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集还原的数据文件
通道 ORA_DISK_1: 将数据文件 00010 还原到 C:\ORACLE\ORADATA\XCLDB\TBS_PWD01.DBF
通道 ORA_DISK_1: 正在读取备份片段 C:\ORACLE\PRODUCT\11.2.0\DBHOME_1\DATABASE\05P2DUK3_1_1
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: restore 命令 (在 03/05/2014 15:42:00 上) 失败
ORA-19870: 还原备份片段 C:\ORACLE\PRODUCT\11.2.0\DBHOME_1\DATABASE\05P2DUK3_1_1 时出错
ORA-19913: 无法解密备份
ORA-28365: Wallet 未打开

 b.打开Wallet.   

RMAN>  sql 'alter system set wallet open identified by "xcl"';


sql 语句: alter system set wallet open identified by "xcl"

9. 再次尝试还原,还原成功    

RMAN> restore tablespace tbs_pwd;


启动 restore 于 05-3月 -14
使用通道 ORA_DISK_1


通道 ORA_DISK_1: 正在开始还原数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集还原的数据文件
通道 ORA_DISK_1: 将数据文件 00010 还原到 C:\ORACLE\ORADATA\XCLDB\TBS_PWD01.DBF
通道 ORA_DISK_1: 正在读取备份片段 C:\ORACLE\PRODUCT\11.2.0\DBHOME_1\DATABASE\05P2DUK3_1_1
通道 ORA_DISK_1: 段句柄 = C:\ORACLE\PRODUCT\11.2.0\DBHOME_1\DATABASE\05P2DUK3_1_1 标记 = TAG20140305T142819
通道 ORA_DISK_1: 已还原备份片段 1
通道 ORA_DISK_1: 还原完成, 用时: 00:00:01
完成 restore 于 05-3月 -14

RMAN> recover tablespace tbs_pwd;


启动 recover 于 05-3月 -14
使用通道 ORA_DISK_1


正在开始介质的恢复
介质恢复完成, 用时: 00:00:09


完成 recover 于 05-3月 -14


RMAN> alter database open;


数据库已打开

测试结束。

--===============================
测试二:

那下面的设置到底有用没呢?
  configure encryption for database on;
  set encryption on identified by 'xcl' only;

继续测:
 
 1.用命令关了Wallet,或重启下数据库
  sql 'alter system set encryption wallet close'

  2. 打开加密   

RMAN>   configure encryption for database on;


旧的 RMAN 配置参数:
CONFIGURE ENCRYPTION FOR DATABASE OFF;
新的 RMAN 配置参数:
CONFIGURE ENCRYPTION FOR DATABASE ON;
已成功存储新的 RMAN 配置参数


RMAN> set encryption on identified by 'xclrman' only;


正在执行命令: SET encryption

RMAN> show all;


db_unique_name 为 XCLDB 的数据库的 RMAN 配置参数为:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE ON;
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO 'C:\ORACLE\PRODUCT\11.2.0\DBHOME_1\DATABAS

3.备份表空间  

RMAN> backup tablespace tbs_pwd;


启动 backup 于 05-3月 -14
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=223 设备类型=DISK
通道 ORA_DISK_1: 正在启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集内的数据文件
输入数据文件: 文件号=00010 名称=C:\ORACLE\ORADATA\XCLDB\TBS_PWD01.DBF
通道 ORA_DISK_1: 正在启动段 1 于 05-3月 -14
通道 ORA_DISK_1: 已完成段 1 于 05-3月 -14
段句柄=C:\ORACLE\PRODUCT\11.2.0\DBHOME_1\DATABASE\06P2E5LL_1_1 标记=TAG20140305T162836 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:01
完成 backup 于 05-3月 -14

4. 关库,破坏,重启
  a.关库    

RMAN> shutdown immediate;


数据库已关闭
数据库已卸装
Oracle 实例已关闭

 b. 删除表空间数据文件
 c. 重启数据库

5. 还原表空间

   a. 直接还原,发现不输密码是不行地。      

RMAN> restore tablespace tbs_pwd;


启动 restore 于 05-3月 -14
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=156 设备类型=DISK


通道 ORA_DISK_1: 正在开始还原数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集还原的数据文件
通道 ORA_DISK_1: 将数据文件 00010 还原到 C:\ORACLE\ORADATA\XCLDB\TBS_PWD01.DBF
通道 ORA_DISK_1: 正在读取备份片段 C:\ORACLE\PRODUCT\11.2.0\DBHOME_1\DATABASE\06P2E5LL_1_1
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: restore 命令 (在 03/05/2014 16:33:35 上) 失败
ORA-19870: 还原备份片段 C:\ORACLE\PRODUCT\11.2.0\DBHOME_1\DATABASE\06P2E5LL_1_1 时出错
ORA-19913: 无法解密备份
ORA-28365: Wallet 未打开

  b. 输入密码,执行还原成功    

RMAN> set decryption identified by "xclrman";


正在执行命令: SET decryption


RMAN> restore tablespace tbs_pwd;


启动 restore 于 05-3月 -14
使用通道 ORA_DISK_1


通道 ORA_DISK_1: 正在开始还原数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集还原的数据文件
通道 ORA_DISK_1: 将数据文件 00010 还原到 C:\ORACLE\ORADATA\XCLDB\TBS_PWD01.DBF
通道 ORA_DISK_1: 正在读取备份片段 C:\ORACLE\PRODUCT\11.2.0\DBHOME_1\DATABASE\06P2E5LL_1_1
通道 ORA_DISK_1: 段句柄 = C:\ORACLE\PRODUCT\11.2.0\DBHOME_1\DATABASE\06P2E5LL_1_1 标记 = TAG20140305T162836
通道 ORA_DISK_1: 已还原备份片段 1
通道 ORA_DISK_1: 还原完成, 用时: 00:00:01
完成 restore 于 05-3月 -14


RMAN> recover tablespace tbs_pwd;


启动 recover 于 05-3月 -14
使用通道 ORA_DISK_1


正在开始介质的恢复
介质恢复完成, 用时: 00:00:01


完成 recover 于 05-3月 -14


RMAN> alter database open;


数据库已打开

测试结束 ,分析,原来我第一个测试走叉了,不用创建Wallet也可以对备份加密的。

--===============================

经测试和查资料得知,RMAN的备份加密分为三种.
  第一种:
    测试二所使用的方式。
      configure encryption for database on;
      set encryption on identified by 'xclrman' only;
      备份命令

      还原时:
      set decryption identified by "xclrman";
      还原命令

  第二种:
    通过配置加密/解密信任书,也就是Oracle Encryption Wallet,来加密备份,这种备份在本机
    还原时,是无须在还原前输入密码的,证书能自动搞定,但把备份介质文件复制到其它机器,
    其它服务器数据库是无法识别的,即无法恢复。
    适合于,备份就是本地的情况。即隐藏密码,又能加密备份。
   
   a. sql 'alter system set encryption key identified by "xcl"';
      前提是有设好sqlnet.ora
          ENCRYPTION_WALLET_LOCATION=(SOURCE=(METHOD=FILE) (METHOD_DATA=(DIRECTORY=C:\oracle\admin\xcldb\wallet)))

    b. 数据库备份命令

    还原时
      a.打开Wallet,数据库每次启动默认是不会打开的。
         sql 'alter system set wallet open identified by "xcl"';
      b.数据库还原命令

 第三种:
   混合型的.把前面两种综合了起来。
   简单来说就是在本机用第二种方式,在异机用第一种方式,它能两者兼顾。

对了加密算法也是能改的:

   CONFIGURE ENCRYPTION ALGORITHM TO 'AES256';     


MAIL: xcl_168@aliyun.com

BLOG: http://blog.csdn.net/xcl168


抱歉!评论已关闭.