版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Oracle审计功能
一、审计分类:
Oracle中审计总体上可分为“标准审计”和“细粒度审计”后者也称为“基
于政策的审计”,在OraclelOG之后功能得到很大增强。其中标准审计可分为用
户级审计和系统级审计。用户级审计是任何Oracle用户可设置的审计,主要是
用户针对自己创建的数据库表或视图进行审计,记录所有用户对这些表或视图的
一切成功和(或)不成功的访问要求以及各种类型的SQL操作。系统级审计只能由
DBA设置,用以监测成功或失败的登录要求、监测GRANT和REVOKE操作以
及其他数据库级权限下的操作。
二、标准审计:
2.1分类:
在ORACLE中分别支持以下三种标准审计类型:
♦语句审计,对某种类型的SQL语句审计,不指定结构或对象,
♦特权审计,对执行相应动作的系统特权的使用审计。
♦对象审计,对一特殊模式对象上的指定语句的审计。
这三种标准审计类型分别对如下3方面进行审计:
♦审计语句的成功执行、不成功执行,或者其两者。
♦对每一用户会话审计语句执行一次或者对语句每次执行审计一次。
♦对全部用户或指定用户的活动的审计O
当数据库的审计功能打开后,在语句执行阶段产生审计记录。审计记录包含有审计的操
作、用户执行的操作、操作的日期和时间等信息。审计记录可存在数据字典表(称为审计
记录)或操作系统审计记录中。数据库审计记录是在SYS模式的AUD$表中。
2.2设置ORACLE标准审计:
下列步骤可以设置ORACLE的标准审计功能:
1.修改初始化参数文件(init<sid>.ora)
如果使用服务器参数文件使用altersystemset<parameter>=<value>scope=spfile|b
Oth,详情参照1・1节中关于参数文件的介绍),设置AUDIT_TRAIL参数,并且重启数据库。
AUDIT_TRAIL的取值如下:
•DB/TRUE:启动审计功能,并且把审计结果存放在数据库的SYS.AUD$表中
•OS:启动审计功能,并把审计结果存放在操作系统的审计信息中
•DB_EXTENDED:具有DB/TRUE的功能,另外填写/\1}口$的SQLBIND和SQLTEXT
字段
•NONE/FALSE:关闭审计功能
2.设置AUDIT_TRAIL参数:
如果设置AUDIT_TRAIL=OS,还需要修改参数AUDIT_FILE_DEST。
如果操作系统支持设置AUDIT_TRAIL=OS,文件会自动存放在AUDIT_FILE
_DEST所指定的目录下,并且文件名包含进程的PID。
比如:
AUDIT_FILE_DEST=$ORACLE_HOME/rdbms/audit
$Is-I$ORACLE_HOME/rdbms/audit
-rw-rw--1ora92dba881Mar1709:57ora_13264.aud
$ps-ef|grep13264
ora921326413235009:56:43?0:00oracleV92(DESCRIPTION=(LOCAL=Y)
SQL>selectspid,program,usernamefromv$process;
SPIDPROGRAMUSERNAME
13264oracle@frhp11(TNSV1-V3)ora92
3.确认审计相关的表是否已经安装
SQLPLUS>connect/ASSYSDBA
SQLPLUS>select*fromsys.aud$;-没有记录返回
SQLPLUS>select*fromdba_audit_trail;-没有记录返回
如果做上述查询的时候发现表不存在,说明审计相关的表还没有安装,需要安装。
SQLPLUS>connect/assysdba
SQLPLUS>@$ORACLE_HOME/rdbms/admin/cataudit.sql
审计表安装在SYSTEM表空间。所以要确保SYSTEM表空间又足够的空间存放审计信息.
4.关闭并重启数据库
5.设置所需要的审计信息
下面是一个例子
SQL>connectsystem/manager
SQL>grantauditsystemtoscott;
SQL>connectscott/tiger
SQL>auditsession;
停止审计:
SQL>noauditsession;
通常设置了标准审计后都是通过Audit语句开启审计,使用noaudit语句收回审计。如下
所示:
对修改SC表结构或数据的操作进行审计可使用如下语句:
AUDIEALTER,UPDATEONSC;
取消对sc表的一切审计可使用如下语句:
NOAUDITALLONSC;
2.3设置审计的实例(对试图尝试口令的访问的审计):
以下是一个审计的实例,用于记录尝试通过野蛮尝试法破译ORACLE帐号口
令的例子:
I.修改审计相关参数(参照上面介绍的方法)
2.重启数据库
3.设置审计信息
SQL>AUDITALLBYACCESSWHENEVERNOTSUCCESSFUL
4.查询AUD$
SQL>selectreturncode,action#,userid,userhost,terminal,timestamp
fromaud$
RETURNCODEACTION#USERIDUSERHOSTTERMINAL
1017100SCOTTWPRATA-BR
1017100SCOTTWPRATA-BR
1017100SCOTTWPRATA-BR
ORA・1017的含义为错误的用广।名口令。通过查看AUD$表可以清楚地看到WPRATA・BR
尝试破译SCOTT的口令。可以通过下面一个存储过程来分析AUD$表,找出可疑的信息:
createorreplaceprocedureAudltLogln(SinceVarchar2,TimesPLSJnteger)
is
USERJDVARCHAR2(20);
cursorc1isselectuserid,count(*)fromsys.aud$wherereturncode='1017'and
timestamp#>=to_date(Since,'yyyy-mm-dd')
groupbyuserid;
cursorC2ISSelectuserhost,
terminal,TO_CHAR(timestamp#,,YYYY-MM-DD:HH24:MI:SS,)
fromsys.aud$WHEREreturncode='1017'and
timestamp#>=to_date(Since,'yyyy-mm-dd,)ANDUSERID=USER_ID;
CtPLSJNTEGER;
V_USERHOSTVARCHAR2(40);
V_TERMINALVARCHAR(40);
V_DATEVARCHAR2(40);
BEGIN
OPENC1;
dbms_output.enable();
LOOP
FETCHC1INTOUSERJD,CT;
EXITWHENC1%NOTFOUND;
IF(CT>=TIMES)THEN
DBMS_OUTPUT.PUT_LINE('USERBROKENALARM/HUSERJD);
OPENC2;
LOOP
FETCHC2INTOV_USERhOST,V_TERMINAL,V_DATE;
DBMS_OUTPUT.PUT_LINE(CHR(9)irHOST:'||V_USERHOST||',TERM:'||V_TERMINAL
ir,TIME:*||V_DATE);
EXITWHENC2%NOTFOUND;
ENDLOOP;
closec2;
ENDIF;
ENDLOOP;
closec1;
END;
一下是执行结果:
SQL>setserveroutputon;
SQL>executeauditlogin(,2004-01-01',2);
USERBROKENALARM:SYS
HOST:,TERM:XUJI,TIME:2004-09-22:11:08:00
HOST:,TERM:XUJI,TIME:2004-09-22:11:08:01
HOST:,TERM:XUJI,TIME:2004-09-22:11:09:29
HOST:,TERM:XUJI,TIME:2004-09-22:11:09:29
PL/SQLn□□□□□□□
2.4将审计相关的表移动到其他表空间:
由于AUD$表等审计相关的表存放在SYSTEM表空间,因此为了不影响系统的性能,保护
SYSTEM表空间,最好把AUD$移动到其他的表空间上。叮以使用卜面的语句来进行移动:
sql>connect/assysdba;
sql>altertableaud$movetablespace<newtablespace>;
sql>alterindexI_aud1rebuildonlinetablespace<newtablespace>;
SQL>altertableauditsmovetablespace<newtablespace>;
SQL>alterindexi_auditrebuildonlinetablespace<newtablespace>;
SQL>altertableaudit_actionsmovetablespace<newtablespace>;
SQL>alterindexi_audit_actionsrebuildonlinetablespace<newtablespace>;
三、细粒度审计:
细粒度审计(FGA)(通过Oracle的.引入)可以理解为“基于政策的审计”。与
标准的审计功能相反,FGA可用于指定生成审计记录必需的条件:
FCA政策通过使用“dbms_fga”程序包以编程方式绑定到对象(表、视图)。类
似于用于通过VPD(〃dbms_rls〃)进行访问控制的程序包,它允许您创建任何需
要的条件,例如:仅当以卡条件为真时审计事件:
在早上九点到下午六点之间或在星期六和星期日对某个表进行了访问。
•使用了公司网络外部的某个IP地址。
•选定或更新了特定列。
•使用了该列的特定值。
这将创建更有意义的审计线索,因为无需记录每一个人对表的每一次访问。从
Oracle数据库10g开始,FGA支持在一个策略中使用“选择”、“插入”、“更
新”和“删除”语句的任意组合。事实上,绑定到表的FGA政策简化了审计玫策
的管理,因为这将只需在数据库中对其更改一次,不用在每个应用程序中一次次
进行。此外。无论用户通过何种方式连接至数据库(通过应用程序、Web接口或
通过SQL*Plus),其操作都会记录下来。
3.1使用细粒度审计:
1、创建测试表:
createtableACCOUNT
(AACT_NOnumbernotnul1,
CUST_IDnumbernotnul1,
BALANCEnumber(15z2)
);
2、添加审计策略:
begin
DBMS_FGA.DROP_POLICY(object_schema=>'TEST',
object_name=>'ACCOUNT',
policy_nam^=>1ACCnUNT_ACCR^S');
end;
这段代码必须由具有执行程序包dbms.fga双限的用户来执行。建议应该建
立一个专门的用户来专门负责添加审计策略。该过程有许多参数,具体含义如下:
OBJECT_SCHEMA对其定义了FGA策略的表或视图的所有者
OBJECT_NAME表或视图的名称
POLICY_NAME策略的名称,由用户自定义—例如,ACCOUNTS_ACCESS
POLICY_TEXT在添加策略时指定的审计条件—例如,BALANCE>=11000
POL1CY_COLIMN审计列—例如,BALANCE
ENABLED如果启用则为YES,否则为N0
PF_SCHEMA拥有策略处理器模块的模式(如果存在)
PF_PACKAGE处理器模块的程序包名称(如果存在)
PFFUNCTION处理器模块的过程名称(如果存在)
3、在定义了策略以后,当用户以通常的方式对表进行查询时,如下所示:
select*frombank,accounts;
审计线索记录此操作。可以使用以下语句查看线索:
selecttimestamp,
dbuser,
os_user,
object_schema,
object_namc,
sql_text
fromdba_fga_audit_trail;
TIMESTAMPDBUSEROSUSEROBJECTOBJECTNSQL_TEXT
26-MAR-10TESTanandaTESTACCOUNTselect*fromaccount
注意名为DBA_FGA_AUDIT_TRAIL的新视图,它记录细粒度的访问信息。其
中显示了审计事件的时间标记、查询者的数据库用户ID、操作系统用户ID、查
询中所使用表的名称和所有者,最后还有确切的查询语句。
3.2审计列和审计条件:
默认情况下会对被审计对象的所有列开启审计,当任何一列被访问时都会纪
录一条审计信息,这在现实情况下不太常见,因为这样会使审计信息表增长过快
造成存储空间的压力,因此通常都会设置审计条件,当条件触发时再发起审计。
例如我们可以对Account表的Balance列设置审计条件,当访问该列并触发审计
条件时才进行审计。如下所示:
begin
dbms_fga.add_policy(
object_schema=>,TES^',
object_name=>,ACCOUNT*,
policy_name=>,ACCOUNT_ACCESSJ,
audit_column=>'BALANCE',
audit_condition=>>BALANCE>=11000,
);
end;
该策略将在访问BALANCE列并且只有访问列值大于等于11000时才发起审计。因
此根据该条件户有如下不同审计状态:
SQL语句审计状态
进行审计。用户选择了在添加策略时所指定的
selectbalancefromaccount;
审计列BALANCEo
进行审计。即使用户没有明确指定列
select*fromaccount;
BALANCE,*也隐含地选择了它。
selectcust_idfromaccount进行审计。即使用户没有明确指定列
wherebalance<10000;BALANCE,where子句也隐含地选择了它。
selectcust_idfromaccount;不进行审计。用户没有选择列BALANCEo
不进行审计。用户没有明确或隐含地选择列
selectcount(*)fromaccount;
BALANCEo
3.3优化器模式,
FGA需要基于成本的优化(CBO),以便正确地工作。在基于规则的优化时,
只要用户从表中进行选择,无论是否选择了相关的列,都始终生成审计线索,增
加了误导项目出现的可能性。为使FGA正确地工作,除了在实例级启用CB0之
外,在SQL语句中应该没有规则暗示(hint),并且必须至少使用评估选顼对
查询中的所有表进行分析工
3.4管理FGA策略:
要删除策略,您可以使用以F语句:
begin
dbmsfga.droppolicy(
object_schema=>'TEST*,
object_name=>'ACCOUNT,
policy_name=>'ACCOUNT.ACCESS'
);
end;
对于更改策略而言,没有随取随用的解决方案。要更改策略中的任何参数,必须
删除策略,再使用更改后的参数添加策略。但是可以暂时禁用已有策略,如下所
示:
begin
dbms_fga.enable_policy(
object_schema=>'TEST*,
object_name=>'ACCOUNT',
policy_name=>'ACCOUNT.ACCESS',
enable=>FALSE
);
end;
若要重新启用它,可使用同一函数,只需将参数enable设置为TRUE。
3.5FGA数据字典视图:
FGA策略的定义位于数据字典视图DBA_AUDTT_POLICTES中。该市途中各列含义
如下:
SESSION_ID审计会话标识符;与V$SESSION视图中的会话标识符不同
TIMESTAMP审计记录生成时的时间标记
DBUSER发出查询的数据库用户
OS_USER操作系统用户
USERHOST用户连接的机器的主机名
客户标识符(如果由对打包过程
CLIENT_ID
dbms_session.set_identifier的调用所设置)
EXT_NAME外部认证的客户名称,如LDAP用户
OB.IECT_SCIIEMA对该表的访问触发了审计的表所有者
OBJECT_NAME对该表的SELECT操作触发了审计的表名称
触发审计的策略名称(如果对表定义了多个策略,则每个策略将
POLICY_NAME插入一条记录。在此情况下,该列显示哪些行是由哪个策略插
入的。)
SCN记录了审计的Oracle系统更改号
SQLTEXT由用户提交的SQL语句
SQLBIND由SQL语句使用的绑定变量(如果存在)
3.6视图和FGA:
假定在ACCOUNTS表上定义视图VW_ACCOUNT如下:
createviewvwaccountasselect*fromaccount;
现在,如果用户从视图中而不是从表中进行选择:
select*fromvw_account;
您将看到以下审计线索:
selectobject_name,sqltextfromdba_fga_audit_trail;
OBJECT_NAMESQL_TEX?
ACCOUNTselect木fromvwaccount
注意,是基表名称而不是视图名称出现在OBJEC'匚NAME列中,因为视图中的选择
是从基表中进行选择。但是,SQL_TEXT列记录/用户提交的实际语句。
如果只希望审计市视图的查询而不是对我的查询,可以对视图本身建立策略
略。通过将视图名称而不是表的名称传递给打包的过程dbms_fga.add_policy中
中的参数objectjame,可以完成这项工作。随后DBA_FGA_AUDIT_TRAIL中的
OBJECT_NAME列将显示视图的名称,并且不会出现有关袤访问的附加记录。
3.7其它用途:
除了记录对表的选择访问,FGA还可用于某些其它情况:
可以对数据仓库使用FGA,以捕获特定的表、视图或物化视图上发生的所
有语句,这有助于计划索引。不需要到VSSQL视图去获取这些信息。即
使SQL语句已经超出了V$SQL的期限,在FGA审计线索中将会始终提
供它。
后于FGA捕获绑定变量,它可以帮助了解绑定变量值的模式,这有助于
设计直方图集合等。
•可以向审计者或DBA发送警告,这有助丁跟踪恶意应用程序。
由于FGA可以作为SELECT语句的触发器,可以在需要这种功能的任何时
候使用它。
3.8FGA在10G中的增强:
3.8.1对所有DML的审计:
在9i中FGA只能对Select语句进行审计,而不能对其他DML语句(Update、
Delete.Insert)进行审计,如果想对其他DML语句进行审计那么只能采取数据
库处发起的形式来实现。在10G中实现了对所有DML语句的审计,如下所示:
begin
dbms_fga.add_policy(
objectschema二)'TEST',
object_name=>'ACCOUNT',
policyname=>>ACCOl'NT_ACCESS,,
audit_column二)'BALANCE',
auditcondition=>'BALANCE>=3000',
statement_types=>JINSERT,UPDATE,DELETE,SELECT,
);
end;
通过statemcntjypcs=>'INSERT,UPDATE,DELETE,SELECT参数制定了新的策略,该策略可
以对Select之外的所有DML操作进行审计。因此根据新的审计条件和审计策略会有如下不同情
况:
第1种情况
之前:BALANCE=1000
用户发出:
updateaccountsetbalance=1200whereACC0UNT_N0=....
旧的和新的balance都小于3,000,审计条件不满足;因此这条语句将不会被
审计。
第2种情况
之前:BALANCE=1000
用户发出:
updateaccountsetbalance=3200whereACCOUNTING=....
新的balance大于3,000,审计条件满足;因此这条语句将会被审计。
第3种情况
之前:BALANCE-3200
用户发出:
updateaccountsetbalance=1200whereACC0UNT_N0=....
新的balance小于3,000,但旧的balance大于3,000。因此审计条件满足,
这条语句将被审计。
第4种情况
用户插入一行,其中有BALANCE<3000o
insertintoaccountvalues(9999,1200,'X'):
因为balance1,200不满足审计条件,所以这条语句不被审计。如果balance
列大于或等于3,000,它将被审计。
第5种情况
用户插入一行,其中balance的值为空。
insertintoaccount(accountno,status)values(9997,'X');
因为balance为空,该列没有任何默认值,所以审计条件不满足(比较NULL>=
3000结果为FALSE),这条语句不会被审计。重要注意事项:假设该列有一个
大于3,000的默认值时,这条语句仍然不会被审计,即使插入行的balance列
值大于3000。注意对于DML语句的审计是由一个自动事务插入的;即使回滚
DML语句的操作,审计记录也将存在不会跟着回滚。
3.8.2制定相关的列策略:
在表ACCOUNT上定义的一个策略,如下:
begin
dbms_fga.addpolicy(
object_schema=>'TEST),
object,name=>'ACCOUNT',
policy_name=>'ACCUUNTJSEL',
audit_column二)'ACCOUNT_N0,BALANCE',
audit_condition=>'BALANCE>=3000',
statementtypes=>'SELECT?
);
end;
在某些情况下,列的组合可能很重要,而不是某个特定的列。以上策略是在
ACCOUNT_NO和BALANCE上定义的。那么如果用户发出以下语句:
selectbalancefromaccountswhereaccount_no=9995;
这条语句将被审计,因为balance列被选中,且余额为3,200,大于3,000,
满足审计条件。
如果一个用户想杳出在银行的总余额,他发出:
selectsum(balance)fromaccount;
这条查询几乎没什么害处;它不明确指出帐户所有者和帐户余额。因此安全策略
可能不会要求审计这条查询。不过,这条查询
selectbalancefromaccountwhereaccount_no=9995
必须被审计;因为它明确地指定了一个帐户。默认地,所有语句都被审计(无论
使用了什么样的列组合)。这将创建大量不需要的审计线索项目,并可能带来一
些空间限制问题。为了限制它们,您可以指定仅当在查询中使用了希望的列组合
时才开始审计。当定义策略时,您可以使用一个新的参数:
auditcolumnopts=>DBMSFGA.ALLCOLUMNS
这个参数将使策略仅当列ACCOUNT_NO和BALANCE在查询中都被访问时才创建
审计线索项目。例如,以下查询将声生一个审计线索项目。
selectaccount_no,balancefromaccount;
但这条查询不会产生审计线索项目。
selectaccount_nofromaccount;
使用这个参数将把审计的数量限制在一个更易管理的大小。如果希望采用默认的
行为一即任意列被选中时都进行审计,那么您可以对同一参数的使用不同值。
audit_column_opts=>DBMS_FGA.AN^'_COLUMNS
3.8.3与标准审计的结合:
通过制定如下审计策略实现标准审计与细粒度审计的结合
begin
dbms_fga.add_policy
objectschema=>'TEST,
object_name=>'ACCOUNT,
policyname=>'ACCOUNT_SEL',
audit_column=>'ACCOUNT_NO,BALANCE,,
audil_condilion->'BALANCE>-3000',
statementtypes=>'SELECT',
audit_co1umn_opts=>DBMS_FGA.ALL_COLUMNS,
audit_trai1=>DB
);"
end;
通过指定audi.t_lrail=>DB参数实现在细粒度审计时开启标准审计。在Oracle
Database1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 多模态纳米成像
- 支护题库及答案
- 2026 年中职精准农业技术(精准农业)试题及答案
- 高速铁路旅客服务心理学课件 第七章 高速铁路旅客群体心理与服务
- 办公楼租赁权合同协议2025年补充
- 办公家具安装协议(2025年安装版)
- 基于机器学习的故障预测技术
- 2025年创建全国文明城市知识竞赛试题50题
- 美术无纸化考试题库及答案
- 道路交通安全(第2版)课件全套 李锐 1-1:道路交通安全课程导入 -10-2:道路交通安全规划
- GB/T 46725-2025协同降碳绩效评价城镇污水处理
- 2025家用美容仪行业简析报告
- 2025年中小学教育政策与法规考试试卷及答案
- 2025上海市崇明区疾病预防控制中心(区卫生健康监督所)后勤保障岗位招聘3人笔试考试参考题库及答案解析
- 妇产科学产褥期并发症教案
- 机动车驾驶员考试《科目四》试卷及答案(2025年)
- 医疗器械经营
- 2025年中国农业无人机行业发展研究报告
- 河北大教育技术学课件05教学理论
- 树立正确的生死观课件
- 2025年四川省高职单招中职类职业技能综合测试(电子信息类)
评论
0/150
提交评论