Normal
0
7.8 磅
0
2
false
false
false
EN-US
ZH-CN
X-NONE一.审计
1.审计简介
1)什么是审计及作用
审计(Audit)用于监视用户所执行的数据库操作,并且Oracle会将审计跟踪结果存放到OS文件(默认位置为$ORACLE_BASE/admin /$ORACLE_SID/adump/)或数据库(存储在system表空间中的SYS.AUD$表中,可通过视图dba_audit_trail查 看)中。
在oracle11g中,审计功能(AUDIT_TRAIL)是默认开启的。而以前的版本中,审计默认是关闭的。
因为开启审计,那么,数据库增加了很多的消耗。会降低业务性能,因此,如果不是很必要,在安装好数据库后,可适当选择关闭数据库审计功能。
2.和审计相关的几个主要参数
audit_trail: None:
不做审计;DB:是默认值,,将audit
trail记录在数据库的审计相关表中,
如aud$,审计的结果只有连接信息;DB,Extended:这样审计结果里面除了连接信息还包含了当时执行的具
体语句;OS:将audit trail记录在操作系统文件中,文件名由
audit_file_dest参数指定;XML:10g里新增的。
Audit_sys_operations:默认为false,当设置为true时,所有sys用户(包括以
sysdba,sysoper身份登录的用户)的操作都会被记录,audit trail不会写在aud$表中,这个很好理解,如果数据库还未启动aud$不可用,那么像conn /as sysdba这样的连接信息,只能记录在其它地方。如果是windows平台,audti trail会记录在windows的事件管理中,如果是linux/unix平台则会记录在audit_file_dest参数指定的文件中。
3.审计级别
当开启审计功能后,可在三个级别对数据库进行审计:Statement(语句)、Privilege(权限)、object(对象)。
Statement:按语句来审计,比如audit table会审计数据库中所有的create
table,drop table,truncate table语句,
alter session by user;会审计user用户所有的数据库连接。这里我们可以看到,对语句的审计也是分用户的。
Privilege:按权限来审计,当用户使用了该权限则被审计,如执行grant select any table to a,当执行了
audit select any table
这条语句后,当用户a访问了用户b的表时(如select * from b.t)会用到select any table权限,故会被审计。注意用户是自己表的所有者,所以用户访问自己的表不会被审计。
Object:按对象审计,只审计on关键字指定对象的相关操作,如aduit,alter,delete,drop,insert on cmy.t by scott;这里会对cmy用户的t表进行审计,但同时使用了by子句,所以只会对scott用户发起的操作进行审计。注意Oracle没有提供对schema中所有 对象的审计功能,只能一个一个对象审计,对于后面创建的对象,Oracle则提供on default子句来实现自动审计,比如执行audit drop on default by access;后,
对于随后创建的对象的drop操作都会审计。但这个default会对之后创建的所有数据库对象有效,似乎没办法指定只对某个用户创建的对象有效,想比trigger可以对schema的DDL进行“审计”,这个功能稍显不足。
2)审计的一些其他选项
by
access / by session:by access每一个被审计的操作都会生成一条audit trail。by session一个会话里面同类型的操作只会生成一条audit trail,默认为by session。
whenever
[not] successful:whenever successful操作成功(dba_audit_trail中returncode字段为0)才审计,
whenever not successful反之。省略该子句的话,不管操作成功与否都会审计。
4.和审计相关的视图
dba_audit_trail:保存所有的audit trail,实际上它只是一个基于aud$的视图。其它的视图dba_audit_session,dba_audit_object,dba_audit_statement都只是dba_audit_trail的一个子集。dba_stmt_audit_opts:可以用来查看statement审计级别的audit options,即数据库设置过哪些statement级别的审计。dba_obj_audit_opts,dba_priv_audit_opts视图功能与之类似all_def_audit_opts:用来查看数据库用on default子句设置了哪些默认对象审计。
5.审计的开启与关闭
修改参数文件开启审计功能,自由控制审计级别。
开启数据库审计:
Ø11g以后版本中不允许动态修改初始化参数,需要修改参数文件,将 audit_trail参数值修改为 ‘db’,’db,extended’,’os’,’xml’其中一个。
Ø11g以前的版本,可以动态修改初始化参数,如:
ALTER
SYSTEM SET audit_trail=db,extended SCOP=SPFILE;
开启管理用户的审计:
Alter system
set audit_sys_operations=TRUE scope=spfile;
关闭审计
11g中,将对应审计语句的audit改为noautdit,如audit
session whenever successful对应的取消审计语句为noaudit session
whenever successful;
或者,修改参数文件中:audit_trail参数为’none’,这样就不会做任何审计相关的操作。
Alter system set audit_trail=’none’;
二.需要注意的文件路径的变化
11G版本中,数据库文件的存储路径有所变化,不知道的,会很难找到。
这些文件包括:最重要的是告警日志,监听日志,控制文件数量及存储目录也有所变化。
1.日志文件路径
11G中,alert日志存储在
’$ORACLE_BASE/diag/rdbms/db_name/$ORACLE_SID/trace/’目录下。
9i,10G中alert日志存储在’/$ORACLE_BASE/admin/$ORACLE_SID/bdump/’下
2.控制文件路径
11G中控制文件只有两个文件,一个使用中的控制文件,一个映像文件。
9i,10G中控制文件有三个文件,一个使用中的控制文件,两个映像文件。
11G中,控制文件存储路径:
$ORACLE_BASE/oradata/$ORACLE_SID/control#.ctl
$ORACLE_BASE/flash_recovery_area/$ORACLE_SID/control#.ctl
9i,10G中控制文件存储路径
$ORACLE_BASE/oradata/$ORACLE_SID/control#.ctl
11G版本前,控制文件默认存放于$ORACLE_BASE/oradata/下。11G以后,对于控制文件的安全性加强了保护,将控制文件分别存储于不同的目录下,别一个映像的存储于闪回区。
三.用户密码安全
Oracle对用户密码有很强的保护意识,其加密方式 是对user_name+password进行hash运算加密,而不单单是对密码进行了加密。用户登录时,用户名及密码作为一个整体经过转译进行鉴权,验证用户是否有权进行登录操作。
数据库在安装的时候,如果没有指定用户密码,安装程序会赋予用户一个默认密码。
11G这一系列版本中,用户密码出现以下新特性:
Ø在11G以前,我们可以通过视图查看到用户密码的加密串,11G以后已经看不到了。
Ø用户名密码开始区分大小写。
10G中,只有使用alter user identified by‘***’才会区分大小写。
9i中,大小
写不进行区分。
Ø口令可以包含未用引号括起来的多字节字符。如果口令包含除$、_或#外的任何特殊字符,则必须用引号括起来。
1)默认密码
在安装数据库时,如果没有设置用户密码那么常用
的几个用户都是有自己默认密码的,详细情况如下:
用户名/密码
登录身份
说明
sys/change_on_install
SYSDBA或SYSOPER
不能以NORMAL登录,可作为默认的系统管理员
system/manager
SYSDBA或NORMAL
不能以SYSOPER登录,可作为默认的系统管理员
sysman/oem_temp
sysman
为oms的用户名
scott/tiger
NORMAL
普通用户
aqadm /aqadm
SYSDBA或NORMAL
高级队列管理员
Dbsnmp/dbsnmp
SYSDBA或NORMAL
复制管理员
2)查看哪些用户在使用默认密码
select*fromdba_users_with_defpwd;
视图dba_users_with_defpwd顾名思义,可以了解到,这里面存储的是仍旧使用默认密码的用户。
但是使用非默认密码的用户的密码,是可以通过sys.user$来查看的。
3)修改用户密码
ALTER USER user_nameIDENTIFIED BY password
;
-----------------------------------------------------------------------------------------------
使用区分大小写的口令: sec_case_sensitive_logon={true | false}
防止 DoS 攻击: sec_protocol_error_further_action={CONTINUE| (DELAY,integer) | (DROP,integer) }
CONTINUE : 这是默认值,就不是進行任何处理
DROP : 去除使用者的登入权限
DELAY : 延长使用者的再入登入的间隔时间,单位是秒
sec_protocol_error_trace_action={ NONE |TRACE| LOG | ALERT }
NONE : 沒有动作
TRACE : 默认值,写入trace中
LOG : 写入alert log中
ALERT : 由dba手动或OEM中设定alert信息
防止强力攻击: sec_max_failed_login_attempts={10|1 to unlimited}
可设定不回传oracle版本相关的信息:sec_return_server_release_banner={true | false}
----------------------------- THE END -------------------------------