教你如何成为Oracle 10g OCP - 第二十章 安全


20.1 审计

Oracle的审计功能非常强大,分为5个层次: 强制审计,标准数据库审计,
基于值的审计,精细化审计以及对DBA的审计 。

20.1.1  强制审计

这种审计始终生效,只要以sysdba登入,就会对此进行记录,信息包括何时,
哪个用户哪个客户端登入到库中。

这种审计在DB关闭时也生效,所以它不是记录在DB表中,而是在操作系统文件
中,对linux或unix而言,则由初始化参数audit_file_dest的值决定,

SQL> show parameter audit_file_dest

NAME              TYPE     VALUE
------------     ------ ----------- ---------------------------
audit_file_dest   string      /u01/product/admin/mxdell/adump


mxrac01$ls 
ora_12893.aud  ora_15393.aud  ora_19054.aud  ora_23252.aud

上面这些文件都是以sysdba登陆后产生的,名称为ora_进程号.aud 。 

而对于windows来说,强制审计信息记录在事件查看器中,没有记录在aud
文件中。

 

20.2 标准数据库审计

默认情况下 audit_trail= NONE,是静态参数,修改需要重新启动DB生效 。

AUDIT_TRAIL = { db | os | none | true | false | db_extended }

none or false
Disables database auditing.

os
Enables database auditing and directs all audit records to the
operating system's audit trail. 如果是windows, 放在event log中。

db or true
Enables database auditing and directs all audit records to the
database audit trail (the SYS.AUD$ table). 信息放在DB中,可
通过表SYS.AUD$或dba_audit_trail视图查询。

db_extended
Enables database auditing and directs all audit records to the
database audit trail (the SYS.AUD$ table). In addition, populates
the SQLBIND and SQLTEXT CLOB columns of the SYS.AUD$ table.

XML
审计信息写入xml文件中,文件位于参数指定路径,通过v$xml_audit_trail
可以查询xml文件信息。

 


审计选项(audit option) 表示审计内容。我们通过以下4个方面进行设置:

1. 审计范围,默认为by session,如果当前session执行了审计的SQL命令,
则记录一次审计信息,如果下次还是相同类型的SQL,则不记录,所以生成
数据量较小,如果by access为单位,则每次都记录要审计的SQL命令,记录
的审计信息量比较大。默认为by session .

2. 审计类型: 指定对执行成功的语句进行审计还是对执行失败的语句进行,
或者不管怎样都记录。默认是成功或失败都记录。

3. 审计特定用户,只有特定用户执行了要审计的SQL命令才记录,其他不记录,
比如HR用户。

4. 审计内容: 包括对SQL审计,对系统权限进行审计,或对对象权限进行审计。

在启用审计时,必须设置审计内容,即必须说明要审计的SQL语句,系统权限,
还是审计对象权限,这叫做审计选项。 其他几个审计方面都有默认值。可以
不用设置。 具体设置如下:

A. 审计SQL语句
例子:  SQL> audit table by hr ;
表示用户HR执行和表有关的命令,只要成功,就会进行审计。可以查询
dba_audit_trail 。 关闭审计选项: SQL>noaudit table ;
启用对session的登陆进行跟踪。
SQL> audit session ;

B. 审计系统权限
例子:
SQL> audit select any table by hr ;
SQL> noaudit select any table by hr ;  (关闭)
注意: 如果HR访问自己用户下的表是不会有审计记录的。


B. 审计对象权限 
例子:
SQL> audit select on hr.credit_card_info by access ;
SQL> audit select on hr.credit_card_info by session ;
SQL> noaudit select on hr.credit_card_info ;  (关闭)
我们也可以审计DML操作:
SQL> audit insert on hr.credit_card_info by session ;
SQL> audit update on hr.credit_card_info by session ;
SQL> audit delete on hr.credit_card_info by session ;

 


20.1.3 基于值的审计

标准审计中,只是记录用户做过啥,不能记录变化前后的值,基于值的审计
可以记录操作前后的实际值,原理上讲,这种审计方法是通过触发器完成的,
需要用户自己编写程序。   所以这种方式可能对系统性能有一些影响,不过
记录的审计信息要多很多。

例子: 略,需要自己创建trigger .

 


20.1.4  精细化审计

前面讨论的都是针对某种操作进行审计,如果需要审计更新某些行,其他行的
更新不需要审计,或者查询的某些列需要审计。 Oracle根据此需要提供了精细
化审计(Fined-Grained Auditing,FGA),该功能从Oracle9i引入。

精细化审计是通过DBMS_FGA包来实现的,并将审计的数据内容作为一个策略,在
数据库中进行定义,审计信息记录在数据字典fga_log$中,可以查询视图
dba_fga_audit_trail 来查询审计数据 。 
例子:
begin
   dbms_fga.add_policy(
     object_schema=>'HR',
     object_name=>'employees',
     policy_name=>'audit_emps_salary',
     audit_condition=>'department_id=100', -- 满足条件的需要审计
     audit_column=>'SALARY', -- 满足条件的需要审计
     enable=>'true',
     statement_types=>'SELECT,UPDATE'  -- 操作类型审计 
 );
end ;
/

删除审计策略:
SQL> exec dbms_fga.drop_policy('HR','EMPLOYEES','audit_emps_salary') ;

 

 

20.1.5  对DBA的审计

前面的所有审计对sys用户都不生效,我们如果需要对SYS用户进行审计,那么需要
设置参数 audit_sys_operations=true , 重启实例生效,因为sys在DB关闭时也能
对数据库操作,对于sys的审计信息不能放在数据字典表中,需要audit_file_dest
路径下的文件记录。

SQL> alter system set audit_sys_operations=true scope=spfile ;
重新启动数据库。
以SYS执行命令,然后在adump目录下找到相关aud 文件即可。

 

 

20.2  虚拟专用数据库(VPD, Virtual Private Database)

VPD, 即通过设置数据库,让不同用户只能查看表中的部分数据,VPD分为两个级别:

行级别: 控制某些用户只能查询某些行,比如销售人员只能查询自己的销售数据。
列级别: 控制某些用户不能查询某些列的值,比如Salary.

20.2.1  基于行的VPD

基于行的VPD也是精细化访问控制(FGAC: Fined Grained Access Control)通过定义
规则实现,规则集合叫做FGAC政策。 如果对某个表设置了FGAC, 当用户发出查询后
DML时,Oracle会根据定义的策略,自动改写SQL, 自动添加where条件。

在使用FGAC,会涉及到一个数据库对象:应用程序上下文(Application Context),可以
理解为数据库中每个session的全局环境变量,比如对于表sals_list,我们创建一个
应用程序上下文,将用户ID号作为属性放入应用程序上下文中,然后在定义FGAC的时候
将该用户ID取出作为限定条件短语,返回给Oracle .

具体例子参考 P415 .

 

20.2.2 基于列的VPD
某些敏感数据列比如工资,可以通过创建基于列的VPD, 屏蔽敏感列数据。
和基于行的VPD一样,设置FGAC政策。我们还需要指定两个参数来设置要屏蔽
的列名,比如sec_relevant_cols,多列以逗号隔开,sec_relevant_cols_opt
设置为all_rows, 表示对表中所有记录都屏蔽salary列 。

具体例子参考 P417 .

 


20.3 透明数据加密(TDE) 

VPD阻止不了用户对数据文件的直接访问。Oracle10g推出的透明数据加密(Transparent
Database Encryption), 加密方法内嵌在数据库中,简化了过程。通过使用TDE, 应用
程序不需要进行任何修改,当数据插入表的时候,Oracle在把数据写入磁盘前,自动对
数据进行加密,下次查询时候自动解密。 加密的同时对相关索引条目也进行了加密。

不过虽然对数据进行了加密,但是如果用户登陆DB查看的话,还是可以看到信息的,那么
TDE不能代替其他的安全措施, 需要和VPD等其他安全手段结合使用。

使用 TDE时,需要借助“钱包”(wallet), 加密解密都需要调用存放了加密密钥的文件。

只需要简单几步实现对TDE的使用。

A. 指定钱包所在路径, 可以通过图形界面Oracle Wallet Mananger来实现。可以输入owm
   打开图形界面,或者也可以编辑sqlnet.ora指定目录。 默认钱包路径在admin/SID/wallet下。
B. 创建钱包 SQL> alter system set encryption key identified by "a1e@d879" ;
C. 打开钱包,具体方式参考P420 .

 

20.4 对备份进行加密
Oracle10g中可以使用3种方式对RMAN备份进行加密。

A. 透明加密模式 : 默认的,借助钱包实现。
B. 基于密码的加密模式,备份前指定密码,恢复时提供密码才能继续。
例子:
RMAN >set encryption on identified by "passwordxxxx"  only ; 
RMAN >backup tablespace users ; 
RMAN >set encryption identified by "passwordxxxx" ; (恢复前)
C. 混合加密模式: 同时使用钱包和密码。

对备份进行加密时,只能对备份集进行加密,不能对镜像副本加密。
详细设置参考 P422 .

 

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

转载于:http://blog.itpub.net/35489/viewspace-676357/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值