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