- 浏览: 486700 次
- 性别:
- 来自: 南阳
文章分类
最新评论
-
yuanhongb:
这么说来,感觉CGI和现在的JSP或ASP技术有点像啊
cgi -
draem0507:
放假了还这么勤啊
JXL操作Excel -
chenjun1634:
学习中!!
PHP/Java Bridge -
Jelen_123:
好文章,给了我好大帮助!多谢!
hadoop安装配置 ubuntu9.10 hadoop0.20.2 -
lancezhcj:
一直用job
Oracle存储过程定时执行2种方法(转)
1、oracle审计功能如何实现启动关闭功能
一 审计功能的参数控制
audit_trail 参数的值可以设置为以下几种
1. NONE:不开启
2. DB:开启审计功能
3. OS:审计记录写入一个操作系统文件。
4. TRUE:与参数DB一样
5. FALSE:不开启审计功能。
这个参数是写道spfile里面的,需要重启数据库
二 查看是否审计功能是否启动
SQL> show parameter audit
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest string /u01/app/oracle/admin/ORCL/adump
audit_sys_operations boolean FALSE
audit_syslog_level string
audit_trail string NONE
三 开启审计
SQL> conn /as sysdba
SQL> show parameter audit
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest string /u01/app/oracle/admin/ORCL/adump
audit_sys_operations boolean FALSE
audit_syslog_level string
audit_trail string NONE
SQL> alter system set audit_sys_operations=TRUE scope=spfile;--审计管理用户(以sysdba/sysoper角色登陆)
SQL> alter system set audit_trail=db,extended scope=spfile;
重启实例
SQL> show parameter audit
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest string /u01/app/oracle/admin/ORCL/adump
audit_sys_operations boolean TRUE
audit_syslog_level string
audit_trail string DB, EXTENDED
(完成)
四 关闭审计
SQL> conn /as sysdba
SQL> show parameter audit
SQL> alter system set audit_trail = none scope=spfile;
重启实例
===================================================
2、
Oracle审计
1.
AUDIT_SYS_OPERATIONS = TRUE审计管理用户(以sysdba/sysoper角色登陆)
windows平台会保存到Event Viewer日志文件中,诸如
CONNECT / AS SYSDBA;
ALTER SYSTEM FLUSH SHARED_POOL;
UPDATE salary SET base=1000 WHERE name='myname';
的操作都会记录到windows事件中
AUDIT_TRAIL=OS时AUDIT_FILE_DEST定义审计的destination
2.
相关的视图
-- 审计记录
select * from sys.aud$
select * from dba_audit_trail
select * from dba_common_audit_trail
-- action的定义
select * from audit_actions
3.
多层环境下的审计
appserve-应用服务器
jackson-client?
AUDIT SELECT TABLE BY appserve ON BEHALF OF jackson;
4.
审计选项
Statement-诸如CREATE TABLE, TRUNCATE TABLE, COMMENT ON TABLE, and DELETE [FROM] TABLE等语句
Privilege-AUDIT CREATE ANY TRIGGER会审计使用CREATE ANY TRIGGER权限执行的语句
Object-审计特定对象上的特定语句,比如emp表上的ALTER TABLE语句
5.
BY SESSION/BY ACCESS-每个session或者每次访问
WHENEVER SUCCESSFUL/WHENEVER NOT SUCCESSFUL-成功/不成功
6.
审计连接或断开连接:
AUDIT SESSION;
-- 指定用户
AUDIT SESSION BY jeff, lori;
审计权限(使用该权限才能执行的操作):
AUDIT DELETE ANY TABLE BY ACCESS WHENEVER NOT SUCCESSFUL;
AUDIT DELETE ANY TABLE;
AUDIT SELECT TABLE, INSERT TABLE, DELETE TABLE, EXECUTE PROCEDURE
BY ACCESS WHENEVER NOT SUCCESSFUL;
对象审计:
AUDIT DELETE ON jeff.emp;
AUDIT SELECT, INSERT, DELETE ON jward.dept BY ACCESS WHENEVER SUCCESSFUL;
7.
取消审计
NOAUDIT session;
NOAUDIT session BY jeff, lori;
NOAUDIT DELETE ANY TABLE;
NOAUDIT SELECT TABLE, INSERT TABLE, DELETE TABLE,EXECUTE PROCEDURE;
-- 取消所有statement审计
NOAUDIT ALL;
-- 取消所有权限审计
NOAUDIT ALL PRIVILEGES;
-- 取消所有对象审计
NOAUDIT ALL ON DEFAULT;
8.
清除审计信息
DELETE FROM SYS.AUD$;
DELETE FROM SYS.AUD$ WHERE obj$name='EMP';
9.
审计视图
STMT_AUDIT_OPTION_MAP-审计选项类型代码
AUDIT_ACTIONS-action代码
ALL_DEF_AUDIT_OPTS-对象创建时默认的对象审计选项
DBA_STMT_AUDIT_OPTS-当前数据库系统审计选项
DBA_PRIV_AUDIT_OPTS-权限审计选项
DBA_OBJ_AUDIT_OPTS
USER_OBJ_AUDIT_OPTS-对象审计选项
DBA_AUDIT_TRAIL
USER_AUDIT_TRAIL-审计记录
DBA_AUDIT_OBJECT
USER_AUDIT_OBJECT-审计对象列表
DBA_AUDIT_SESSION
USER_AUDIT_SESSION-session审计
DBA_AUDIT_STATEMENT
USER_AUDIT_STATEMENT-语句审计
DBA_AUDIT_EXISTS-使用BY AUDIT NOT EXISTS选项的审计
DBA_AUDIT_POLICIES-审计POLICIES
DBA_COMMON_AUDIT_TRAIL-标准审计+精细审计
===============================================
u 审查可疑的活动。例如:数据被非授权用户所删除,此时安全管理员可决定对该 [url=javascript:;]数据库[/url]的所有连接进行审计,以及对数据库的所有表的成功地或不成功地删除进行审计。
u 监视和收集关于指定数据库活动的数据。例如:DBA可收集哪些被修改、执行了多少次逻辑的I/O等统计数据。
ORACLE支持三种审计类型:
u 语句审计,对某种类型的[url=javascript:;]SQL[/url]语句审计,不指定结构或对象。
u 特权审计,对执行相应动作的系统特权的使用审计。
u 对象审计,对一特殊模式对象上的指定语句的审计。
ORACLE所允许的审计选择限于下列方面:
u 审计语句的成功执行、不成功执行,或者其两者。
u 对每一用户会话审计语句执行一次或者对语句每次执行审计一次。
u 对全部用户或指定用户的活动的审计。
当数据库的审计是使能的,在语句执行阶段产生审计记录。审计记录包含有审计的操作、用户执行的操作、操作的日期和时间等信息。审计记录可存在数据字典表(称为审计记录)或操作系统审计记录中。数据库审计记录是在SYS模式的AUD$表中。
设置ORACLE审计下列步骤可以设置ORACLE的审计功能:
1.修改参数文件(init<sid>.ora,如果使用服务器参数文件使用alter system set<parameter>=<value> scope=spfile|both,详情参照1.1节中关于参数文件的介绍),设置AUDIT_TRAIL参数,并且重启数据库。AUDIT_TRAIL的取值如下:
l DB/TRUE:启动审计功能,并且把审计结果存放在数据库的SYS.AUD$表中
l OS:启动审计功能,并把审计结果存放在操作系统的审计信息中
l DB_EXTENDED:具有DB/TRUE的功能,另外填写AUD$的SQLBIND和SQLTEXT字段
l NONE/FALSE:关闭审计功能
2.如果设置AUDIT_TRAIL = OS,还需要修改参数AUDIT_FILE_DEST。
如果操作系统支持设置AUDIT_TRAIL=OS,文件会自动存放在AUDIT_FILE
_DEST所指定的目录下,并且文件名包含进程的PID。
比如:
AUDIT_FILE_DEST = $ORACLE_HOME/rdbms/audit
$ ls -l $ORACLE_HOME/rdbms/audit
-rw-rw---- 1 ora92 dba 881 Mar 17 09:57 ora_13264.aud
$ ps -ef|grep 13264
ora92 13264 13235 0 09:56:43 ? 0:00 oracleV92 (DESCRIPTION=(LOCAL=Y)
SQL> select spid, program, username from v$process;
SPID PROGRAM USERNAME
------ -------------------------------------------- -------------
...
13264 oracle@frhp11 (TNS V1-V3) ora92
注意:WINDOWS NT不使用AUDIT_FILE_DEST参数,如果使用OS设置,那么审计信息会存放在WINDOWS NT的事件日志里。下面的章节会有专门的介绍。
3.确认审计相关的表是否已经安装
SQLPLUS> connect / AS SYSDBA
SQLPLUS> select * from sys.aud$; --没有记录返回
SQLPLUS> select * from dba_audit_trail;--没有记录返回
如果做上述查询的时候发现表不存在,说明审计相关的表还没有安装,需要安装。
SQLPLUS> connect / as sysdba
SQLPLUS> @$ORACLE_HOME/rdbms/admin/cataudit.sql
审计表安装在SYSTEM表[url=javascript:;]空间[/url]。所以要确保SYSTEM表空间又足够的空间存放审计信息。
4.关闭并重启数据库
5.设置所需要的审计信息
下面是一个例子
SQL> connect system/manager
SQL> grant audit system to scott;
SQL> connect scott/tiger
SQL> audit session;
停止审计:
SQL> noaudit session;
设置审计的实例:对试图尝试口令的访问的审计本节讨论的是一个审计的实例,用于记录尝试通过野蛮尝试法破译ORACLE帐号口令的例子:
1.修改审计相关参数(参照上一节介绍的方法)
2.重启数据库
3.设置审计信息
SQL>AUDIT ALL BY ACCESS WHENEVER NOT SUCCESSFUL
4.查询AUD$
SQL> select returncode, action#, userid, userhost, terminal,timestamp
from aud$
RETURNCODE ACTION# USERID USERHOST TERMINAL
---------- ---------- -------- -------------------- --------------------
1017 100 SCOTT WPRATA-BR
1017 100 SCOTT WPRATA-BR
1017 100 SCOTT WPRATA-BR
ORA-1017的含义为错误的用户名口令。通过查看AUD$表可以清楚地看到WPRATA-BR尝试破译SCOTT的口令。可以通过下面一个存储过程来分析AUD$表,找出可疑的信息:
create or replace procedure AuditLogin(Since Varchar2,Times PLS_Integer)
is
USER_ID VARCHAR2(20);
cursor c1 is select userid,count(*) from sys.aud$ where returncode='1017' and timestamp#>=to_date(Since,'yyyy-mm-dd')
group by userid;
cursor C2 IS Select userhost, terminal,TO_CHAR(timestamp#,'YYYY-MM-DD:HH24:MI:SS')
from sys.aud$ WHERE returncode='1017' and timestamp#>=to_date(Since,'yyyy-mm-dd') AND USERID=USER_ID;
ct PLS_INTEGER;
V_USERHOST VARCHAR2(40);
V_TERMINAL VARCHAR(40);
V_DATE VARCHAR2(40);
BEGIN
OPEN C1;
dbms_output.enable(1024000);
LOOP
FETCH C1 INTO USER_ID,CT;
EXIT WHEN C1%NOTFOUND;
IF(CT>=TIMES) THEN
DBMS_OUTPUT.PUT_LINE('USER BROKEN ALARM:'||USER_ID);
OPEN C2;
LOOP
FETCH C2 INTO V_USERhOST,V_TERMINAL,V_DATE;
DBMS_OUTPUT.PUT_LINE(CHR(9)||'HOST:'||V_USERHOST||',TERM:'||V_TERMINAL||',TIME:'||V_DATE);
EXIT WHEN C2%NOTFOUND;
ENDLOOP;
close c2;
END IF;
ENDLOOP;
close c1;
END;
/
一下是执行结果:
SQL>set serveroutput on;
SQL> execute auditlogin('2004-01-01',2);
USER BROKEN ALARM: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/SQL过程已成功完成。
将审计相关的表移动到其他表空间
由于AUD$表等审计相关的表存放在SYSTEM表空间,因此为了不影响系统的性能,保护SYSTEM表空间,最好把AUD$移动到其他的表空间上。可以使用下面的语句来进行移动:
sql>connect / as sysdba;
sql>alter table aud$ move tablespace <new tablespace>;
sql>alter index I_aud1 rebuild online tablespace <new tablespace>;
SQL> alter table audit$ move tablespace <new tablespace>;
SQL> alter index i_audit rebuild online tablespace <new tablespace>;
SQL> alter table audit_actions move tablespace <new tablespace>;
SQL> alter index i_audit_actions rebuild online tablespace <new tablespace>;
Oracle审计功能
一、 审计分类:
Oracle中审计总体上可分为“标准审计”和“细粒度审计”后者也称为“基于政策的审计”,在Oracle10G之后功能得到很大增强。其中标准审计可分为用户级审计和系统级审计。用户级审计是任何Oracle用户可设置的审计,主要是用户针对自己创建的数据库表或视图进行审计,记录所有用户对这些表或视图的一切成功和(或)不成功的访问要求以及各种类型的SQL操作。系统级审计只能由DBA设置,用以监测成功或失败的登录要求、监测GRANT和REVOKE操作以及其他数据库级权限下的操作。
二、 标准审计:
2.1 分类:
在ORACLE中分别支持以下三种标准审计类型:
u 语句审计,对某种类型的SQL语句审计,不指定结构或对象。
u 特权审计,对执行相应动作的系统特权的使用审计。
u 对象审计,对一特殊模式对象上的指定语句的审计。
这三种标准审计类型分别对如下3方面进行审计:
u 审计语句的成功执行、不成功执行,或者其两者。
u 对每一用户会话审计语句执行一次或者对语句每次执行审计一次。
u 对全部用户或指定用户的活动的审计。
当数据库的审计功能打开后,在语句执行阶段产生审计记录。审计记录包含有审计的操作、用户执行的操作、操作的日期和时间等信息。审计记录可存在数据字典表(称为审计记录)或操作系统审计记录中。数据库审计记录是在SYS模式的AUD$表中。
2.2设置ORACLE标准审计:
下列步骤可以设置ORACLE的标准审计功能:
1. 修改初始化参数文件(init<sid>.ora)
如果使用服务器参数文件使用alter system set <parameter>=<value> scope=spfile|both,详情参照1.1节中关于参数文件的介绍),设置 AUDIT_TRAIL参数,并且重启数据库。AUDIT_TRAIL的取值如下:
l DB/TRUE:启动审计功能,并且把审计结果存放在数据库的 SYS.AUD$ 表中
l OS:启动审计功能,并把审计结果存放在操作系统的审计信息中
l DB_EXTENDED:具有DB/TRUE的功能,另外填写AUD$的SQLBIND和SQLTEXT字段
l 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
$ ls -l $ORACLE_HOME/rdbms/audit
-rw-rw---- 1 ora92 dba 881 Mar 17 09:57 ora_13264.aud
$ ps -ef|grep 13264
ora92 13264 13235 0 09:56:43 ? 0:00 oracleV92 (DESCRIPTION=(LOCAL=Y)
SQL> select spid, program, username from v$process;
SPID PROGRAM USERNAME
------ -------------------------------------------- -------------
...
13264 oracle@frhp11 (TNS V1-V3) ora92
3. 确认审计相关的表是否已经安装
SQLPLUS> connect / AS SYSDBA
SQLPLUS> select * from sys.aud$; -- 没有记录返回
SQLPLUS> select * from dba_audit_trail; -- 没有记录返回
如果做上述查询的时候发现表不存在,说明审计相关的表还没有安装,需要安装。
SQLPLUS> connect / as sysdba
SQLPLUS> @$ORACLE_HOME/rdbms/admin/cataudit.sql
审计表安装在SYSTEM表空间。所以要确保SYSTEM表空间又足够的空间存放审计信息。
4. 关闭并重启数据库
5. 设置所需要的审计信息
下面是一个例子
SQL> connect system/manager
SQL> grant audit system to scott;
SQL> connect scott/tiger
SQL> audit session;
停止审计:
SQL> noaudit session;
通常设置了标准审计后都是通过Audit语句开启审计,使用noaudit语句收回审计。如下所示:
对修改SC表结构或数据的操作进行审计可使用如下语句:
AUDIE ALTER,UPDATE ON SC;
取消对SC表的一切审计可使用如下语句:
NOAUDIT ALL ON SC;
2.3设置审计的实例(对试图尝试口令的访问的审计):
以下是一个审计的实例,用于记录尝试通过野蛮尝试法破译ORACLE帐号口令的例子:
1. 修改审计相关参数(参照上面介绍的方法)
2. 重启数据库
3. 设置审计信息
SQL>AUDIT ALL BY ACCESS WHENEVER NOT SUCCESSFUL
4. 查询AUD$
SQL> select returncode, action#, userid, userhost, terminal,timestamp
from aud$
RETURNCODE ACTION# USERID USERHOST TERMINAL
---------- ---------- -------- -------------------- --------------------
1017 100 SCOTT WPRATA-BR
1017 100 SCOTT WPRATA-BR
1017 100 SCOTT WPRATA-BR
ORA-1017的含义为错误的用户名口令。通过查看AUD$表可以清楚地看到WPRATA-BR尝试破译SCOTT的口令。可以通过下面一个存储过程来分析AUD$表,找出可疑的信息:
create or replace procedure AuditLogin(Since Varchar2,Times PLS_Integer)
is
USER_ID VARCHAR2(20);
cursor c1 is select userid,count(*) from sys.aud$ where returncode='1017' and timestamp#>=to_date(Since,'yyyy-mm-dd')
group by userid;
cursor C2 IS Select userhost, terminal,TO_CHAR(timestamp#,'YYYY-MM-DD:HH24:MI:SS')
from sys.aud$ WHERE returncode='1017' and timestamp#>=to_date(Since,'yyyy-mm-dd') AND USERID=USER_ID;
ct PLS_INTEGER;
V_USERHOST VARCHAR2(40);
V_TERMINAL VARCHAR(40);
V_DATE VARCHAR2(40);
BEGIN
OPEN C1;
dbms_output.enable(1024000);
LOOP
FETCH C1 INTO USER_ID,CT;
EXIT WHEN C1%NOTFOUND;
IF(CT>=TIMES) THEN
DBMS_OUTPUT.PUT_LINE('USER BROKEN ALARM:'||USER_ID);
OPEN C2;
LOOP
FETCH C2 INTO V_USERhOST,V_TERMINAL,V_DATE;
DBMS_OUTPUT.PUT_LINE(CHR(9)||'HOST:'||V_USERHOST||',TERM:'||V_TERMINAL||',TIME:'||V_DATE);
EXIT WHEN C2%NOTFOUND;
END LOOP;
close c2;
END IF;
END LOOP;
close c1;
END;
/
一下是执行结果:
SQL>set serveroutput on;
SQL> execute auditlogin('2004-01-01',2);
USER BROKEN ALARM: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/SQL 过程已成功完成。
2.4将审计相关的表移动到其他表空间:
由于AUD$表等审计相关的表存放在SYSTEM表空间,因此为了不影响系统的性能,保护SYSTEM表空间,最好把AUD$移动到其他的表空间上。可以使用下面的语句来进行移动:
sql>connect / as sysdba;
sql>alter table aud$ move tablespace <new tablespace>;
sql>alter index I_aud1 rebuild online tablespace <new tablespace>;
SQL> alter table audit$ move tablespace <new tablespace>;
SQL> alter index i_audit rebuild online tablespace <new tablespace>;
SQL> alter table audit_actions move tablespace <new tablespace>;
SQL> alter index i_audit_actions rebuild online tablespace <new tablespace>;
三、 细粒度审计:
细粒度审计 (FGA)(通过 Oracle9i 引入)可以理解为“基于政策的审计”。与标准的审计功能相反,FGA 可用于指定生成审计记录必需的条件:
FGA 政策通过使用“dbms_fga”程序包以编程方式绑定到对象(表、视图)。类似于用于通过 VPD ("dbms_rls") 进行访问控制的程序包,它允许您创建任何需要的条件,例如:仅当以下条件为真时审计事件:
- 在早上九点到下午六点之间或在星期六和星期日对某个表进行了访问。
- 使用了公司网络外部的某个 IP 地址。
- 选定或更新了特定列。
- 使用了该列的特定值。
这将创建更有意义的审计线索,因为无需记录每一个人对表的每一次访问。从 Oracle 数据库 10g 开始,FGA 支持在一个策略中使用“选择”、“插入”、“更新”和“删除”语句的任意组合。事实上,绑定到表的 FGA 政策简化了审计政策的管理,因为这将只需在数据库中对其更改一次,不用在每个应用程序中一次次进行。此外。无论用户通过何种方式连接至数据库(通过应用程序、Web 接口或通过 SQL*Plus),其操作都会记录下来。
3.1 使用细粒度审计:
1、创建测试表:
create table ACCOUNT
(AACT_NO number not null,
CUST_ID number not null,
BALANCE number(15,2)
);
2、添加审计策略:
begin
DBMS_FGA.DROP_POLICY(object_schema => 'TEST',
object_name => 'ACCOUNT',
policy_name => 'ACCOUNT_ACCESS');
end;
这段代码必须由具有执行程序包 dbms_fga 权限的用户来执行。建议应该建立一个专门的用户来专门负责添加审计策略。该过程有许多参数,具体含义如下:
OBJECT_SCHEMA |
对其定义了 FGA 策略的表或视图的所有者 |
OBJECT_NAME |
表或视图的名称 |
POLICY_NAME |
策略的名称,由用户自定义 — 例如,ACCOUNTS_ACCESS |
POLICY_TEXT |
在添加策略时指定的审计条件 — 例如,BALANCE >= 11000 |
POLICY_COLUMN |
审计列 — 例如,BALANCE |
ENABLED |
如果启用则为 YES,否则为 NO |
PF_SCHEMA |
拥有策略处理器模块的模式(如果存在) |
PF_PACKAGE |
处理器模块的程序包名称(如果存在) |
PF_FUNCTION |
处理器模块的过程名称(如果存在) |
3、在定义了策略以后,当用户以通常的方式对表进行查询时,如下所示:
select * from bank.accounts;
审计线索记录此操作。可以使用以下语句查看线索:
select timestamp,
db_user,
os_user,
object_schema,
object_name,
sql_text
from dba_fga_audit_trail;
TIMESTAMP DB_USER OS_USER OBJECT_ OBJECT_N SQL_TEXT
--------- ------- ------- ------- -------- ----------------------
26-MAR-10 TEST ananda TEST ACCOUNT select * from account
注意名为 DBA_FGA_AUDIT_TRAIL 的新视图,它记录细粒度的访问信息。其中显示了审计事件的时间标记、查询者的数据库用户 ID、操作系统用户 ID、查询中所使用表的名称和所有者,最后还有确切的查询语句。
3.2 审计列和审计条件:
默认情况下会对被审计对象的所有列开启审计,当任何一列被访问时都会纪录一条审计信息,这在现实情况下不太常见,因为这样会使审计信息表增长过快造成存储空间的压力,因此通常都会设置审计条件,当条件触发时再发起审计。例如我们可以对Account表的Balance列设置审计条件,当访问该列并触发审计条件时才进行审计。如下所示:
begin
dbms_fga.add_policy (
object_schema=>'TEST',
object_name=>'ACCOUNT',
policy_name=>'ACCOUNT_ACCESS',
audit_column => 'BALANCE',
audit_condition => 'BALANCE >= 11000'
);
end;
该策略将在访问BALANCE列并且只有访问列值大于等于11000时才发起审计。因此根据该条件户有如下不同审计状态:
SQL 语句 |
审计状态 |
select balance from account; |
进行审计。用户选择了在添加策略时所指定的审计列 BALANCE。 |
select * from account; |
进行审计。即使用户没有明确指定列 BALANCE,* 也隐含地选择了它。 |
select cust_id from account where balance < 10000; |
进行审计。即使用户没有明确指定列 BALANCE,where 子句也隐含地选择了它。 |
select cust_id from account; |
不进行审计。用户没有选择列 BALANCE。 |
select count(*) from account; |
不进行审计。用户没有明确或隐含地选择列 BALANCE。 |
3.3优化器模式:
FGA 需要基于成本的优化 (CBO),以便正确地工作。在基于规则的优化时,只要用户从表中进行选择,无论是否选择了相关的列,都始终生成审计线索,增加了误导项目出现的可能性。为使 FGA 正确地工作,除了在实例级启用 CBO 之外,在 SQL 语句中应该没有规则暗示(hint),并且必须至少使用评估选项对查询中的所有表进行分析。
3.4管理 FGA 策略:
要删除策略,您可以使用以下语句:
begin
dbms_fga.drop_policy (
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.5 FGA 数据字典视图:
FGA 策略的定义位于数据字典视图 DBA_AUDIT_POLICIES 中。该市途中各列含义如下:
SESSION_ID |
审计会话标识符;与 V$SESSION 视图中的会话标识符不同 |
TIMESTAMP |
审计记录生成时的时间标记 |
DB_USER |
发出查询的数据库用户 |
OS_USER |
操作系统用户 |
USERHOST |
用户连接的机器的主机名 |
CLIENT_ID |
客户标识符(如果由对打包过程 dbms_session.set_identifier 的调用所设置) |
EXT_NAME |
外部认证的客户名称,如 LDAP 用户 |
OBJECT_SCHEMA |
对该表的访问触发了审计的表所有者 |
OBJECT_NAME |
对该表的 SELECT 操作触发了审计的表名称 |
POLICY_NAME |
触发审计的策略名称(如果对表定义了多个策略,则每个策略将插入一条记录。在此情况下,该列显示哪些行是由哪个策略插入的。) |
SCN |
记录了审计的 Oracle 系统更改号 |
SQL_TEXT |
由用户提交的 SQL 语句 |
SQL_BIND |
由 SQL 语句使用的绑定变量(如果存在) |
3.6视图和 FGA:
假定在 ACCOUNTS 表上定义视图 VW_ACCOUNT 如下:
create view vw_account as select * from account;
现在,如果用户从视图中而不是从表中进行选择:
select * from vw_account;
您将看到以下审计线索:
select object_name, sql_text from dba_fga_audit_trail;
OBJECT_NAME SQL_TEXT
----------- -------------------------------------------------
ACCOUNT select * from vw_account
注意,是基表名称而不是视图名称出现在 OBJECT_NAME 列中,因为视图中的选择是从基表中进行选择。但是,SQL_TEXT 列记录了用户提交的实际语句。
如果只希望审计对视图的查询而不是对表的查询,可以对视图本身建立策略。通过将视图名称而不是表的名称传递给打包的过程 dbms_fga.add_policy 中的参数 object_name,可以完成这项工作。随后 DBA_FGA_AUDIT_TRAIL 中的 OBJECT_NAME 列将显示视图的名称,并且不会出现有关表访问的附加记录。
3.7 其它用途:
除了记录对表的选择访问,FGA 还可用于某些其它情况:
- 可以对数据仓库使用 FGA,以捕获特定的表、视图或物化视图上发生的所有语句,这有助于计划索引。不需要到 V$SQL 视图去获取这些信息。即使 SQL 语句已经超出了 V$SQL 的期限,在 FGA 审计线索中将会始终提供它。
- 由于 FGA 捕获绑定变量,它可以帮助了解绑定变量值的模式,这有助于设计直方图集合等。
- 可以向审计者或 DBA 发送警告,这有助于跟踪恶意应用程序。
由于 FGA 可以作为 SELECT 语句的触发器,可以在需要这种功能的任何时候使用它。
3.8 FGA在10G中的增强:
3.8.1 对所有DML的审计:
在9i中FGA只能对Select语句进行审计,而不能对其他DML语句(Update、Delete、Insert)进行审计,如果想对其他DML语句进行审计那么只能采取数据库处发起的形式来实现。在10G中实现了对所有DML语句的审计,如下所示:
begin
dbms_fga.add_policy (
object_schema => 'TEST',
object_name => 'ACCOUNT',
policy_name => 'ACCOUNT_ACCESS',
audit_column => 'BALANCE',
audit_condition => 'BALANCE >= 3000',
statement_types => 'INSERT, UPDATE, DELETE, SELECT'
);
end;
通过statement_types => 'INSERT, UPDATE, DELETE, SELECT'参数制定了新的策略,该策略可以对Select之外的所有DML操作进行审计。因此根据新的审计条件和审计策略会有如下不同情况:
第 1 种情况
之前:BALANCE = 1000
用户发出:
update account set balance = 1200 where ACCOUNT_NO = ....
旧的和新的 balance 都小于 3,000,审计条件不满足;因此这条语句将不会被审计。
第 2 种情况
之前:BALANCE = 1000
用户发出:
update account set balance = 3200 where ACCOUNT_NO = ....
新的 balance 大于 3,000,审计条件满足;因此这条语句将 会被审计。
第 3 种情况
之前:BALANCE = 3200
用户发出:
update account set balance = 1200 where ACCOUNT_NO = ....
新的 balance 小于 3,000,但旧的 balance 大于 3,000。因此审计条件满足,这条语句将被审计。
第 4 种情况
用户插入一行,其中有 BALANCE < 3000。
insert into account values (9999,1200,'X');
因为 balance 1,200 不满足审计条件,所以这条语句不被审计。如果 balance 列大于或等于 3,000,它将被审计。
第 5 种情况
用户插入一行,其中 balance 的值为空。
insert into account (account_no, status) values (9997, 'X');
因为 balance 为空,该列没有任何默认值,所以审计条件不满足(比较 NULL >= 3000 结果为 FALSE),这条语句不会被审计。重要注意事项:假设该列有一个大于 3,000 的默认值时,这条语句仍然不会被审计,即使插入行的 balance 列值大于 3000。 注意对于DML语句的审计是由一个自动事务插入的;即使回滚 DML语句的操作,审计记录也将存在不会跟着回滚。
3.8.2制定相关的列策略:
在表 ACCOUNT 上定义的一个策略,如下:
begin
dbms_fga.add_policy (
object_schema => 'TEST',
object_name => 'ACCOUNT',
policy_name => 'ACCOUNT_SEL',
audit_column => 'ACCOUNT_NO, BALANCE',
audit_condition => 'BALANCE >= 3000',
statement_types => 'SELECT'
);
end;
在某些情况下,列的组合可能很重要,而不是某个特定的列。以上策略是在 ACCOUNT_NO 和 BALANCE 上定义的。那么如果用户发出以下语句:
select balance from accounts where account_no = 9995;
这条语句将被审计,因为 balance 列被选中,且余额为 3,200,大于 3,000,满足审计条件。
如果一个用户想查出在银行的总余额,他发出:
select sum(balance) from account;
这条查询几乎没什么害处;它不明确指出帐户所有者和帐户余额。因此安全策略可能不会要求审计这条查询。不过,这条查询
select balance from account where account_no = 9995
必须被审计;因为它明确地指定了一个帐户。默认地,所有语句都被审计(无论使用了什么样的列组合)。这将创建大量不需要的审计线索项目,并可能带来一些空间限制问题。为了限制它们,您可以指定仅当在查询中使用了希望的列组合时才开始审计。当定义策略时,您可以使用一个新的参数:
audit_column_opts => DBMS_FGA.ALL_COLUMNS
这个参数将使策略仅当列 ACCOUNT_NO 和 BALANCE 在查询中都被访问时才创建审计线索项目。例如,以下查询将产生一个审计线索项目。
select account_no, balance from account;
但这条查询不会产生审计线索项目。
select account_no from account;
使用这个参数将把审计的数量限制在一个更易管理的大小。如果希望采用默认的行为 — 即任意列被选中时都进行审计,那么您可以对同一参数的使用不同值。
audit_column_opts => DBMS_FGA.ANY_COLUMNS
3.8.3 与标准审计的结合:
通过制定如下审计策略实现标准审计与细粒度审计的结合
begin
dbms_fga.add_policy (
object_schema => 'TEST',
object_name => 'ACCOUNT',
policy_name => 'ACCOUNT_SEL',
audit_column => 'ACCOUNT_NO, BALANCE',
audit_condition => 'BALANCE >= 3000',
statement_types => 'SELECT',
audit_column_opts => DBMS_FGA.ALL_COLUMNS,
audit_trail => DB
);
end;
通过指定audit_trail => DB参数实现在细粒度审计时开启标准审计。在 Oracle Database 10g 中,标准审计也得到了巨大的改进。通过 AUDIT 命令执行标准审计,它现在能够捕获大量其它有用的信息。在内容和功能方面,标准审计类似于细粒度审计。然而,作为一个数据库管理员,有兴趣知道所有的审计项目,而不只是一个审计项目。一个新的视图,DBA_COMMON_AUDIT_TRAIL,结合了标准审计线索和 FGA审计线索。用以下查询来检查它们二者如:
select * from dba_common_audit_trail;通过这条查询可以同时查看两种审计收集的信息。
四、FGA 审计和标准审计的差异 :
- 标准审计必须用参数 AUDIT_TRAIL 在数据库级启用。这个参数不是动态的;您必须重启数据库来使其生效。相比而言,FGA 不需要任何参数修改。
- 一旦被设置在一个对象上,标准审计将保持在那里。要解除它,必须用 NOAUDIT 命令删除审计选项。这可能很不方便,因为在一个表上丢弃审计选项也将丢弃元数据信息。然而,FGA 可以临时禁用和启用,不丢失任何元数据信息。
- FGA 只能够处理四种类型的语句:SELECT、INSERT、UPDATE 和 DELETE。相比而言,常规审计可以处理其它许多语句和权限,甚至会话连接和断开。
- 标准审计每次会话只创建一条记录(按会话)或每次访问对象创建一条记录(按访问)这种占用资源很少的方式对于控制审计线索表中的空间非常重要。FGA 并不是同样节省资源;它每次访问运行一次 — 使得线索更大。
- 通过记录线索,标准审计可以用来检测任何中断企图,如果企图没有成功,则将产生错误代码。而 FGA 不能。
- 标准审计可以写数据库表或 OS 文件。后者在审计员(不是数据库管理员)能够访问线索时非常有用。在 Windows 下,非数据库审计线索记录在事件日志中,并且可以用不同的方式对其进行访问。这个选项保护了审计线索的完整性。然而,FGA 日志仅写到数据库表 FGA_LOG$ 中。可以在 FGA 中创建用户自定义的审计处理程序来写 OS 文件,但它们的完整性不能保证。
- 标准审计可以设置用于默认对象。当表是在运行期创建时,这个功能变得极为有用:默认的审计选项允许没有数据库管理员干预的审计。这在 FGA 中是不可能的,用户必须在一个现有的表上创建策略,上述的情况只能在表已创建之后才可能发生。
- 在 FGA 中,审计更加灵活 — 仅当访问某些列,当某个特定的条件为真时等等。这种多功能性在您需要控制线索的增长时非常方便。
- 在 FGA 中,SQL 赋值变量默认被捕获。在标准审计中,必须把初始化参数 audit_trail设为 db_extended,以启用这一功能。
- 权限差异:标准审计需要审计系统或语句权限;FGA 只需要 dbms_fga 程序包上的运行权限。
发表评论
-
mysql 定时任务
2015-11-03 09:57 785定时任务 查看event是否开启: show variabl ... -
tomcat服务器大数量数据提交Post too large解决办法
2015-10-29 11:05 744tomcat默认设置能接收HTTP POST请求的大小最大 ... -
Tomcat启动内存设置
2015-10-20 15:40 702Tomcat的启动分为startupo.bat启动和注册为w ... -
Java串口包Javax.comm的安装
2015-10-12 16:32 704安装个java的串口包安装了半天,一直找不到串口,现在终于搞 ... -
在 Java 应用程序中访问 USB 设备
2015-10-10 17:49 970介绍 USB、jUSB 和 JSR- ... -
自动生成Myeclipse7.5注册码
2015-08-11 16:46 493package com.rbt.action; impor ... -
mysql定时器
2015-08-04 14:01 6115.1以后可以使用 ALTER EVENT `tes ... -
oracle安装成功后,更改字符集
2015-07-23 11:53 648看了网上的文章,乱码有以下几种可能 1. 操作系统的字符集 ... -
运用navicat for mysql实现定时备份
2015-06-05 15:02 1094使用navicat for mysql实现定时备份 首 ... -
利用html5调用本地摄像头拍照上传图片
2015-05-18 09:36 2615测试只有PC上可以,手机上不行 <!DOCTYPE ... -
必须Mark!最佳HTML5应用开发工具推荐
2015-05-15 22:50 973摘要:HTML5自诞生以来,作为新一代的Web标准,越来 ... -
Mobl试用二
2015-05-13 14:28 653最近有空又看了一下Mobl的一些说语法,备忘一下: 1 ... -
Nginx配置文件详细说明
2015-05-08 19:58 621在此记录下Nginx服务器nginx.conf的配置文件说明 ... -
axis调用cxf
2015-04-23 13:51 5621、写address时不用加?wsdl Service s ... -
Oracle10g数据文件太大,导致C盘空间不够用的解决方法
2015-03-19 15:22 952由于在安装的时候将Oracle安装到了C盘,表空间也创建到了C ... -
mysql 获取第一个汉字首字母
2015-03-18 17:48 662select dmlb, dmz, dmsm1, CHAR ... -
failed to install Tomcat6 service解决办法
2015-02-12 09:20 546最近我重装了一下tomcat 6.0,可不知为什么,总是安装 ... -
tomcat 分配java内存
2015-02-11 10:37 608//首先检查程序有没有限入死循环 这个问题主要还是由这个问 ... -
[Android算法] Android蓝牙开发浅谈
2014-12-15 15:27 676对于一般的软件开发人 ... -
Android 内存溢出解决方案(OOM) 整理总结
2014-11-21 10:12 759原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出 ...
相关推荐
"Oracle审计功能详解" Oracle审计功能是指Oracle数据库中的一种安全机制,用于记录和跟踪用户对数据库的访问和操作行为。这种机制可以帮助DBA和安全管理员发现和防止不正当的访问和操作。 一、审计分类 Oracle...
Oracle审计功能解读,用于记录数据库中表的数据变化,如增、删除、改、查等操作记录。可以记录对数据库对象的所有操作。什么时候,什么用户对什么对象进行了什么类型的操作。
Oracle审计功能介绍 Oracle审计功能是一种强大的工具,用于跟踪和记录数据库中的各种操作活动,以确保数据库的安全和完整性。本文将对Oracle审计功能进行详细的介绍,包括审计分类、标准审计、细粒度审计、审计类型...
Oracle审计功能记录数据库操作 Oracle审计功能是记录数据库操作的重要工具,用于监视用户所执行的数据库操作。下面是Oracle审计功能的知识点总结: 一、什么是审计(Audit) 审计是指对用户所执行的数据库操作的...
Oracle审计功能是数据库管理系统中一个重要的安全性特性,用于跟踪并记录数据库用户执行的各种操作,以实现数据保护和合规性需求。在Oracle 10g版本中,审计功能可以帮助管理员监控和记录潜在的可疑活动,例如非授权...
"Oracle审计功能详解" Oracle审计功能是数据库安全性的一部分,用于记录和跟踪数据库中的各种活动,以便于数据库管理员(DBA)可以更好地监控和控制数据库中的访问和操作。Oracle审计功能可以分为标准审计和细粒度...
Oracle审计功能是数据库管理系统中的一种安全机制,它允许系统管理员监控和记录用户的数据库操作,以确保数据的安全性和合规性。审计功能可以详细追踪并记录特定的数据库活动,这对于故障排查、安全审计和合规性检查...
Oracle数据库的审计功能是数据库管理...Oracle审计功能的使用是确保数据库安全性、符合法规要求和跟踪潜在问题的关键手段。通过恰当配置,DBA可以有效地监控数据库的使用,及时发现并处理潜在的安全威胁或异常行为。
Oracle审计功能是数据库管理系统Oracle中的一个重要安全特性,用于记录数据库中的特定操作,以便进行事后分析、合规性检查或故障排查。审计分为“标准审计”和“细粒度审计”两种,前者关注整体行为,后者则提供了更...
在给定的文件片段中,提到了Oracle审计功能的一些关键知识点,下面将详细解释这些内容。 首先,Oracle的审计信息通常存储在AUD$表中。这个表位于SYSAUD$的表空间内,可以通过访问DBA_AUDIT_TRAIL视图来查询审计记录...
在介绍Oracle数据库12c及更高版本中的统一审计功能时,我们需要首先理解Oracle审计的基本概念和审计的方式。Oracle审计指的是记录数据库活动的过程,以便跟踪和审查数据库中的操作和数据访问。这有助于维护数据的...
以下是对Oracle审计功能的详细介绍: 一、审计的效果 Oracle审计可以记录所有对数据库对象的操作,包括何时、哪个用户对哪个对象执行了何种类型的操作。虽然它不会记录具体的DML(数据操纵语言)语句导致的数据变化...
以下是对Oracle审计功能的深入理解: 一、审计的效果与目的 审计能够记录所有对数据库对象的操作,包括何时、何人对哪个对象进行了何种类型的操作。尽管它不能记录具体的数据更改内容,如更新前后的数值差异,但...
Oracle数据库审计功能的安全审计获取技术是确保数据库系统安全性和合规性的重要手段。Oracle数据库提供了强大的审计功能,可以跟踪和记录数据库的活动,以便于监控潜在的安全威胁、合规性问题以及性能瓶颈。本文将...
在.NET环境中,远程连接Oracle数据库并开启Oracle审计功能是一个关键的操作,这有助于监控数据库的活动,确保数据安全。本文将详细介绍这一过程,并提供相应的解决步骤。 首先,我们需要通过SQL*Plus登录Oracle...
在Oracle 8i/9i版本中,由于内置的审计功能仅能记录谁执行了操作,但无法详细展示数据的变化情况,因此触发器成为了实现细粒度审计的关键手段。 触发器的创建主要涉及以下步骤和类型: 1. DDL(Data Definition ...
除了基本的Audit功能外,Oracle还提供了更高级的Fine-Grained Auditing(FGA),它允许基于条件的审计,使得审计信息更加精确和可控。下面是如何使用DBMS_FGA包来管理FGA策略: 1. **添加FGA策略** 使用`DBMS_FGA...