
Encrypting Backups 备份加密
1. Transparent encryption: With a wallet (default) 透明加密,默认的, 依赖于wallet
2. Password encryption: With a password (no wallet) 密码加密
3. wallet扩展,隐藏数据库登录密码
密透明模式加密
透明模式加密依赖于钱包 wallet
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default #没有开透明加密
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
开启透明模式加密的步骤:
1 创建钱包wallet
2 打开钱包,创建一个主秘钥保存到钱包
3 在RMAN CONFIGURE ENCRYPTION FOR DATABASE ON
4 你可以选择加密算法 默认是aes128
5 只要钱包保持打开状态,然后你做任何备份都是加密
6 只要钱包保持打开状态,可以做还原(自动解密)
1. 创建wallet
图形工具
首先使用oracle wallet manager 创建加密的wallet,然后使用sysdba身份打开wallet设置加密密钥。
su - oracle
export DISPLAY=192.168.3.123:0.0
xhost +
输入: owm
新建
输入密码ora1cle2
no 不创建证书
在菜单栏中选择wallet
另存为 选择目录/u01/app/oracle
确保sqlnet.ora包含
su - oracle
cd $ORACLE_HOME/network/admin
vim sqlnet.ora
WALLET_LOCATION=
(SOURCE=
(METHOD=file)
(METHOD_DATA=
(DIRECTORY=/u01/app/oracle)))
2. 打开wallet
sqlplus / as sysdba
alter system set encryption wallet open identified by "ora1cle2";
3. 在实例中设置密钥
alter system set encryption key identified by "ora1cle2";
4. 将 RMAN 配置为使用透明加密
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
输入;
CONFIGURE ENCRYPTION FOR DATABASE ON
5. 对users表空间备份
rman target 在RMAN的所有都被加密 还原自动解密
backup datafile 4 format '/u01/app/oracle/u.dbk' tag='4tf';
6. 模拟故障 关闭wallt, 恢复备份
删除文件等待恢复
RMAN> report schema;
Report of database schema for database with db_unique_name ORCL
4 5 USERS *** +DATA/orcl/datafile/users.260.853038485
关闭钱包
alter system set encryption wallet close identified by "ora1cle2";
模拟故障:删除数据文件4 然后通过透明加密后的备份集还原
关闭数据库
shutdown immediate;
删除数据文件
su - grid
asmcmd
rm +DATA/orcl/datafile/users.260.853044409
su - oracle
sqlplus as sysdba
startup #报错
Database mounted.
ORA-01157: cannot identify/lock data file 4 - see DBWR trace file
ORA-01110: data file 4: '+DATA/orcl/datafile/users.260.848206087'
去修复第4个文件 ,要求用备份集 tag='4bak';
查看4的备份集
BS Key Type LV Size Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
42 Full 3.27M DISK 00:00:01 22-MAY-14
BP Key: 46 Status: AVAILABLE Compressed: NO Tag: 4TF
Piece Name: u01/app/oracle/u.dbk
List of Datafiles in backup set 42
File LV Type Ckp SCN Ckp Time Name
---- -- ---- ---------- --------- ----
4 Full 1069444 22-MAY-14 +DATA/orcl/datafile/users.260.848206087
rman target
run {
restore datafile 4 from tag='4tf';
recover datafile 4 ;
}
结果报错
ORA-19870: error while restoring backup piece u01/app/oracle/u.dbk
ORA-19913: unable to decrypt backup #无法解密
ORA-28365: wallet is not open
7. 打开wallt,恢复备份文件
在还原之前 打开钱包
sqlplus as sysdba
alter system set encryption wallet open identified by "ora1cle2";
rman target
run {
restore datafile 4 from tag='4tf';
recover datafile 4 ;
}
最后打开数据库
alter database open ;
密码加密
使用密码加密RMAN备份集
在做备份之前:SET ENCRYPTION ON IDENTIFIED BY 密码 ONLY
再实施备份,备份命令和以前一样;
在做还原前:SET DECRYPTION IDENTIFIED BY 密码
再还原,还原命令和以前一样。

例:
1. 加密前设置密码
SET ENCRYPTION ON IDENTIFIED BY ora1cle2 ONLY;
2. 对users表空间备份
backup datafile 4 format '/u01/app/oracle/up.dbk' tag='4passwod';
3. 对users表空间数据文件删除 ,要求通过备份集 tag='4passwod' 恢复表空间数据
shutdown immediate ;
su - grid
asmcmd
rm +DATA/orcl/datafile/users.260.848200547
export ORACLE_SID=orcl
sqlplus as sysdba
starutp #报错
提示:
Database mounted.
ORA-01157: cannot identify/lock data file 4 - see DBWR trace file
ORA-01110: data file 4: '+DATA/orcl/datafile/users.260.848200547'
通过备份去恢复:
rman target sys/oracle@orcl catalog rman/rman
run {
restore datafile 4 from tag="4PASSWOD";
recover datafile 4 ;
}
RMAN-03002: failure of restore command at 07/29/2013 03:56:48
ORA-19870: error while restoring backup piece u01/app/u5.dbk
ORA-19913: unable to decrypt backup #不能解密的备份集
ORA-28365: wallet is not open
报错ORA-19913: unable to decrypt backup #要求解密
在恢复前必须先设置解密密码:
SET DECRYPTION IDENTIFIED BY ora1cle2;
run {
restore datafile 4 from tag='4passwod';
recover datafile 4 ;
}
alter database open ;
Wallet作用扩展
wallet对用户名和口令的支持
Wallet作用
从Oracle10gR2开始, 通过使用Oracle Wallet达到任意用户不使用密码登录数据库(非操作系统认证方式), 这对在shell中要使用用户密码登录数据库进行操作的脚本来说是非常有用的, 可以不暴露用户密码.
比如在Oracle客户端通过mkstore命令设置Wallet认证信息, 然后通过"sqlplus @connect_string"方式就可以直接连接数据库.
本例是让u_test用户无需使用密码登录系统, mkstore用法如下:
$ $ORACLE_HOME/bin/mkstore
mkstore [-wrl wrl] [-create] [-createSSO] [-delete] [-deleteSSO] [-list] [-createEntry alias secret] [-viewEntry alias] [-modifyEntry alias secret] [-deleteEntry alias] [-help]
要去隐藏sys/oracle的信息
1、创建wallet
cd $ORACLE_BASE/admin
mkdir wallet
cd wallet
pwd
/u01/app/oracle/admin/wallet
mkstore -wrl u01/app/oracle/admin/wallet -create
Enter password:
Enter password again:
ls u01/app/oracle/admin/wallet
cwallet.sso ewallet.p12
2、修改tnsnames.ora
cd $ORACLE_HOME/network/admin/
vi tnsnames.ora
添加如下这段内容:
orcl_sys =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = yutianedu)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
tnsping orcl_sys
测试能否连接成功:
sqlplus sys/oracle@orcl_sys as sysdba 登录成功 表示连接符没有什么问题 (服务别名正确)
3、将连接信息添加到客户端的wallet里:
mkstore -wrl u01/app/oracle/admin/wallet -createCredential orcl_sys sys oracle 存 sys的密码
Enter password:
Create credential oracle.security.client.connect_string1
确认用户认证信息已经加入到Wallet
mkstore -wrl u01/app/oracle/admin/wallet -listCredential
Enter wallet password:<输入钱包密码>
4、配置客户端的sqlnet.ora,添加如下内容:
pwd
/u01/app/oracle/product/10.2.0/db_1/network/admin
vi sqlnet.ora
WALLET_LOCATION =
(SOURCE =
(METHOD = FILE)
(METHOD_DATA =
(DIRECTORY = /u01/app/oracle/admin/wallet)
)
)
SQLNET.WALLET_OVERRIDE=true
解释:参数
WALLET_OVERRIDE
5、测试
sqlplus /@orcl_sys as sysdba
6、删除Wallet认证的方法
mkstore -wrl /u01/app/oracle/admin/wallet -deleteCredential orcl_sys (网络连接串)
Enter wallet password:<输入钱包密码>
Delete credential
Delete 1

扩展:钱包可以存储账户名和密码 ,那么你就可以对系统工程师隐藏shell脚本的密码
有一个脚本是这样写的
vim a.sh
#!/bin/bash
export ORACLE_SID=orcl
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
$ORACLE_HOME/bin/rman nocatalog target sys/oracle<<EOF
run{
allocate channel ch1 device type disk;
backup datafile 4 ;
release channel ch1;
}
exit
EOF
chmod u+x a.sh
./a.sh
如果对方看到脚本,发现你用sys密码oralce,为了避免该情况发生,将账户名和密码到wallet里。
改写脚本 :
#!/bin/bash
export ORACLE_SID=orcl
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_home_1
$ORACLE_HOME/bin/rman nocatalog target /@orcl_sys <<EOF #隐藏了密码信息
run{
allocate channel ch1 device type disk;
backup datafile 4 ;
release channel ch1;
}
exit
EOF




