暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 如何对备份加密

oracleEDU 2017-09-12
1438

Encrypting Backups 备份加密

1. Transparent encryption: With a wallet (default)  透明加密,默认的, 依赖于wallet

2. Password encryption: With a password (no wallet)  密码加密

3. wallet扩展,隐藏数据库登录密码

1

密透明模式加密

透明模式加密依赖于钱包 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 ;

2

密码加密

使用密码加密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 ;  

3

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 


最后修改时间:2021-04-28 20:02:03
文章转载自oracleEDU,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论