ITPub博客

首页 > IT职业 > IT生活 > 这一阶段在四个阶段中也是最长的-续二

这一阶段在四个阶段中也是最长的-续二

原创 IT生活 作者:davies 时间:2007-04-11 20:09:26 0 删除 编辑
这一阶段在四个阶段中也是最长的-续二[@more@]

1. Starting restore at 26-MAY-05

2. using channel ORA_DISK_1

3.

4. ... messages ...

5. ORA-19870: error reading backup piece C:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AR

6. EAANANDABACKUPSET2006_02_09O1_MF_NNNDF_TAG20060209T221325_1YR16QLT_.BKP

7. ORA-19913: unable to decrypt backup

8. ORA-28365: wallet is not open

错误信息是很清楚的;该钱夹必须是打开的。 如果您需要在其它服务器上恢复表空间,您必须拷贝该钱夹,使用正确的密码打开该钱夹。 如何恶意入侵者盗窃了磁带,他将不能恢复备份。

基于密码的模式。 这种情况下,不需要将钱夹用于密码管理。密码加密备份,同时密码本身也使用密码加密。 命令如下:

RMAN> set encryption on identified by "53cr3t" only;
RMAN> backup tablespace users;

密码将对上面产生的备份集进行加密。 为了在恢复中对密码进行加密,您必须使用如下密码:

RMAN> set decryption identified by "53cr3t ";
RMAN> restore tablespace users;

这种方法就不需要使用钱夹了。 因此在任何服务器上恢复备份,您只需要密码,不再需要钱夹。然而,您的密码在脚本中必须是可见的。这样,任何能访问数据库服务器的恶意入侵者将能够读取该密码。 请参阅第 2 阶段,其中涉及了如何隐藏密码的内容。

混合模式。由名称可知,该模式两种方法的结合体。您按照以下方式进行备份:

RMAN> set encryption on identified by "53cr3t";
RMAN> backup tablespace users;

注意:在命令 set encryption 中没有“only”语句。 这样就可以使用两种方法之一来恢复备份:使用密码“tiger”,或者打开钱包。 例如,请注意以下命令。 没有提供密码,但是成功地进行了恢复。

RMAN> sql 'alter tablespace users offline';

RMAN> restore tablespace users;

Starting restore at 26-MAY-05

allocated channel:ORA_DISK_1

... restore command output comes here ...

当您使用脚本处理备份时,经常不得不将数据库恢复到不同的服务器(例如 QA 服务器)上时,这种方法将派上大用场。 但是一般来说,这种方法通常没有太大的实际用处。

如果您使用透明模式进行备份加密,您也可以备份钱夹。即使对手获得了钱夹,他没有密码也打不开钱夹。

问题

  • 我以前提到加密是非常占用 CPU 的过程。因此,对整个 RMAN 备份集进行加密将是高度占用 CPU 的操作。 您可以通过部分地对备份进行加密缩短 CPU 周期——仅仅选择包含敏感数据的表空间。 一个更好的方法是将透明数据加密用于列级加密。
  • 透明方法中的钱夹和基于密码方法的密码是很重要的。 如果您将它们都丢失了,您将不再能对备份进行加密;因此,要有一个计划对它们进行备份。
  • 如果您使用基于密码的加密,该密码必须在脚本中。 但是可能很容易被盗。

操作计划

1. 确定您是否真的需要对整个备份集进行加密,而不是对某些表中的某些列加密。

2. 如果对 RMAN 备份进行加密,请选择整个数据库或特定表空间。

3. 选择基于密码的方法、透明方法,以及混合模式方法。

4. 如果采用透明方法,或混合模式方法,则

a. 配置钱夹。

b. 打开钱夹。

c. 在 RMAN 中,配置表空间或者整个数据库进行备份加密。

5. 如果是基于密码的方法,或者混合模式方法,则

a. 选择密码,并将它放入 RMAN 脚本中。使用第 2 阶段中说明的任一密码隐藏技术。

b. 只使用那些脚本进行备份。


4.6 从存档日志中挖掘历史

背景 数据库安全实施的一个很重要的方面是确保数据库上不发生未授权的 DDL 活动。 恶意入侵者获取连接数据库的合法路由后,可以很方便的写几段代码来对数据库实施简单的拒绝服务攻击。

在第 3 阶段中,您了解了如何保护主要对象,所以没有 DBA 的同意是不能更改主要对象的。但是,如果非法更改得到同意,但在后来才得知发生了攻击,该怎么办呢? 这就要用到安全的第四个方面——责任可查性。

一个选项是开启 DDL 审计以跟踪 DDL 活动。 总而言之,这是最容易的方法——易于设置,更易于浏览,可以进行归档,等等。 然而,审计会影响性能,这是我们正试图避免的。 问题是如何重新跟踪 DDL 语句,而不用对审计进行设置。

策略可以使用称为 Log Miner 的工具(或特性)。 Oracle8i 数据库中推出了 Log Miner,利用它可以搜索在线重做日志或者归档日志。

下文告诉您如何设置日志挖掘以挖掘 DDL 详细信息。 首先,获取要挖掘的在线日志文件或者归档日志文件,并将它们添加到 Log Miner 会话中。

sqlplus / as sysdba

begin

dbms_logmnr.add_logfile (

'C:ORACLEDATABASEANANDAREDO03.LOG');

dbms_logmnr.add_logfile (

'C:ORACLEDATABASEANANDAREDO02.LOG');

dbms_logmnr.add_logfile (

'C:ORACLEDATABASEANANDAREDO01.LOG');

end;

/

添加文件之后,启动 Log Miner 会话。 您必须传递数据字典源;在这里我们已经将在线类别指定为源。

begin

dbms_logmnr.start_logmnr (

options => dbms_logmnr.dict_from_online_catalog

);

end;

被挖掘的内容放在称为 V$LOGMNR_CONTENTS 的视图中;但是该视图是临时的——仅仅启动 Log Miner 的会话可以看到该视图。 因此,如果以后您想进行分析,您需要将它保存在永久表中。

create table lm_contents

nologging

as

select * from v$logmnr_contents;

Now for the analysis. To find the DDL commands you would issue the following query:

select sql_redo

from lm_contents

where operation = 'DDL'

and seg_owner not in ('SYS','SYSTEM','PUBLIC');

下面是一个样例输出: 注意:没有 DROP TABLE 语句——在 Oracle 数据库 10g中,删除的表实际上没有被删除,而是进行了重新命名。 SQL_REDO 将反映这点。 实际上,用户使用 PURGE 子句删除表时,列 SQL_REDO 将会反映正确的命令。 为了保存空间,我已经修剪了输出,所以函数和过程的 DDL 出现了一部分。 我也已经使用 RECSEPCHAR '.'以显示多行记录中的设计行。)

SQL_REDO

-------------------------------------------------------------------------------

ALTER PACKAGE "XDB"."DBMS_XSLPROCESSOR" COMPILE SPECIFICATION REUSE SETTINGS;

ALTER PACKAGE "XDB"."DBMS_XMLDOM" COMPILE SPECIFICATION REUSE SETTINGS;

ALTER PACKAGE "XDB"."DBMS_XMLPARSER" COMPILE SPECIFICATION REUSE SETTINGS;

ALTER PACKAGE "EXFSYS"."DBMS_RLMGR_DR" COMPILE BODY REUSE SETTINGS;

truncate

table developers;

...............................................................................

create table patient_diagnosis

(

patient_id number,

...............................................................................

create view vw_patient_diagnosis

as

...............................................................................

create or replace view vw_patient_diagnosis

as

...............................................................................

create or replace function pd_pol

(

p_schema in varchar2,

...............................................................................

create or replace function pd_pol

(

p_schema in varchar2,

...............................................................................

create or replace function pd_pol

(

p_schema in varchar2,

...............................................................................

grant connect, resource to ananda identified by VALUES '1DB10D95DE84E304' ;

create or replace function pd_pol

(

...............................................................................

create or replace function pd_pol

(

p_schema in varchar2,

...............................................................................

ALTER TABLE "ARUP"."TEST1" RENAME TO "BIN$JQHaX2mpSxOyrhkxAteHmg==$0" ;

drop table test1 AS "BIN$JQHaX2mpSxOyrhkxAteHmg==$0" ;

当然,该输出本身可能是没有任何意义;您必须察看更多的信息,例如 Log Miner 条目中的时间戳记、SCN、等等,在用户操作和实际事件之间进行有效的连接。

select timestamp, scn, seg_owner, seg_name

from lm_contents

where operation = 'DDL'

and seg_owner not in ('SYS','SYSTEM','PUBLIC')

/

下面是一个样例输出:

TIMESTAMP SCN SEG_OWNER SEG_NAME

--------- ---------- ---------- ------------------------------

06-FEB-06 1024674 XDB DBMS_XSLPROCESSOR

06-FEB-06 1026884 XDB DBMS_XMLDOM

06-FEB-06 1026896 XDB DBMS_XMLPARSER

06-FEB-06 1026918 EXFSYS DBMS_RLMGR_DR

06-FEB-06 1029244 ARUP DEVELOPERS

08-FEB-06 1096847 ARUP PATIENT_DIAGNOSIS

08-FEB-06 1097057 ARUP VW_PATIENT_DIAGNOSIS

08-FEB-06 1097920 ARUP VW_PATIENT_DIAGNOSIS

08-FEB-06 1100059 ARUP PD_POL

08-FEB-06 1100157 ARUP PD_POL

08-FEB-06 1100386 ARUP PD_POL

08-FEB-06 1100413 ANANDA

08-FEB-06 1101544 ANANDA PD_POL

08-FEB-06 1101564 ARUP PD_POL

09-FEB-06 1123950 ARUP TEST1

09-FEB-06 1123953 ARUP TEST1

注意:我使用的是 SEG_OWNER,不是 USERNAME。 由于 Oracle 数据库 10.2.0.1 中的一个缺陷没有解决,USERNAME 没有放入进去。

这只是怎样从归档日志中抽取 DDL 语句的一个示例。 您也可以使用任何语句挖掘日志——DML。 DML 语句挖掘是对审计的重要代替,因为它们对数据库不施加任何性能压力。

提示
Log Miner
 是非侵入的,但是在服务器上它不占用很多 CPU 周期和 PGA 内存。 因此,请仔细地操作 Log Miner,最好在减少装载的条件下操作。(另外一个选项是将存档日志移动到不同的服务器上,在那些挖掘存档日志。 只要有可能的时候,都应该利用该选项。)

操作计划

1. 识别您想从日志中挖掘的语句,以及挖掘频率。 一些示例可能是与删除对象有关的 DDL 语句;但是您可能需要更加有选择性。 在数据仓库环境里,应用程序暂时创建许多表,然后删除这些表,因此您可能想不选择那些模式。

2. 使用以上技术定期从归档日志中提取信息,并因为可能的滥用和模式对它们进行分析。


4.7 结论

该阶段的任务量比较少,但是这些任务执行起来却要花费很多时间。 另外,因为它们是目标的一部分,所有没有明晰的详细信息。 这些次要的细节变化很大,所以要进行综合的通用型描述是不可能的。

安全要求的最重要因素是要明白您不可能在真空中求得安全。为了有效地构建一个安全的数据库基础架构,您的行为必须和对机构独特本质的理解协调起来,您的分析必须包括业务流程,从而将敏感数据和非敏感数据隔离开来。 例如,信用卡数在任何机构都将被保护,但是销售数怎么办呢?在某些机构中(例如零售店),数据量相当庞大,加密保护就不适宜了。但是对冲基金商贸公司却是可行的, 在这里销售数据被严加保护。 查看敏感数据的一个分层方法可能实用于某些情况下;但是在大多数情况下,分层方法最可能按需提供。

即将结束时,我希望您已经学习到某些您现在就可以使用的有价值的工具和技巧来保护您的数据库基础架构。如果您能花费一些时间让我了解您对第 4 阶段的反馈和改进建议,同时提供其它相关问题和资料,我将非常感谢。

这里提供的内容仅仅是为了教学,并没有得到 Oracle 的确认;使用这些内容后的结果自负。 无论如何您都不应该将这里提供的内容视为咨询或服务产品的一部分。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/178357/viewspace-910011/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    81
  • 访问量
    507774