在oracle中aut,Oracle数据库数据访请安全与审计方案

本文档详细介绍了如何在Oracle 9.2.0.1数据库中配置审计功能,监控特定用户、应用程序对关键表的操作,包括审计时段、访问记录。通过对象审计和细粒度审计实现需求,同时考虑性能影响并管理审计日志资源。
摘要由CSDN通过智能技术生成

Oracle数据库数据访问安全与审计方案

这是一份真实的客户需求实现方案。客户要求监控到某些关键表在什么时间段、什么用户、什么应用程序以及访问哪些具体的记录。

数据库系统是Oracle9.2.0.1,它的审计功能可实现该需求。

基于审计对正常运行的应用的性能压力,需要设置特定时间段的数据访问审计。

从审计日志中获得的监控详细信息,那些表被什么应用访问,什么时候访问。提供详细报告信息。

(miki西游@mikixiyou 的文档,原文链接: http://mikixiyou.iteye.com/blog/1547353)

1       审计功能原理

Oracle数据库的审计功能来分析管理数据库的访问安全。

通常,审计的用途如下:

可审计特定的用户、表、或具体的行的当前操作,或者影响特定的内容。

例如,什么用户查询了什么表,甚至表中那些记录。

调查可疑的操作。

例如,如果有用户正在删除某些表的数据,审计人员可使用审计功能审计所有的数据库连接,数据库成功或者不成功的删除操作。

通报没有被授权的用户正操作或者删除数据的所有者,该非法用户有过多的不被允许的权限,可检查出权限设置问题。

监控和收集特殊的数据库行为的数据。

检测授权和访问控制的实施的问题。

例如,可以创建一个希望的审计策略。这个审计策略保证其他情况下绝不会生成审计记录。但是,如果这个策略下生成了审计记录,就可以知道有其他的安全控制没有被正确地实现。

审计一般分为四类,分别为语句审计、权限审计、对象审计、细粒度审计。

其中前三类为标准审计,在ORACLE数据库各个版本中都有,最后一类称为细粒度审计,在ORACLE9i以后的版本中出现,并在10g中功能增强。

语句审计可审计特定类型的操作语句,甚至可以审计某些类型的一系列操作。如,audit table可审计表上的所有的DDL语句。

权限审计可审计相关操作的系统权限。如,audit create table。

对象审计可审计精确的对象上的明确的语句,如audit select on temployees。

对象审计更精确,可审计一个对象上唯一一个明确类型的语句,并且作用于数据库中所有的用户。

细粒度审计可审计基于内容的细粒度的数据访问和操作,如某个字段的值大于某值。

在ORACLE10g中,就这两大类审计,比较两者的异同。

标准审计必须用参数 AUDIT_TRAIL 在数据库级启用。这个参数不是动态的;必须重启数据库来使其生效。相比而言,细粒度审计不需要任何参数修改。

一旦被设置在一个对象上,标准审计将保持在那里。要解除它,必须用 NOAUDIT 命令删除审计选项。这可能很不方便,因为在一个表上丢弃审计选项也将丢弃元数据信息。然而,细粒度审计 可以临时禁用和启用,不丢失任何元数据信息。

细粒度审计 只能够处理四种类型的语句:SELECT、INSERT、UPDATE 和 DELETE。相比而言,常规审计可以处理其它许多语句和权限,甚至会话连接和断开。

标准审计每次会话只创建一条记录(按会话)或每次访问对象创建一条记录(按访问)这种占用资源很少的方式对于控制审计线索表中的空间非常重要。细粒度审计 并不是同样节省资源;它每次访问运行一次 — 使得线索更大。

通过记录线索,标准审计可以用来检测任何中断企图,如果企图没有成功,则将产生错误代码。而 细粒度审计不能。

标准审计可以写数据库表或 OS 文件。后者在审计员(不是数据库管理员)能够访问线索时非常有用。这个选项保护了审计线索的完整性。然而,细粒度审计 日志仅写到数据库表 FGA_LOG$ 中。

标准审计可以设置用于默认对象。当表是在运行期创建时,这个功能变得极为有用:默认的审计选项允许没有数据库管理员干预的审计。这在 细粒度审计中是不可能的,用户必须在一个现有的表上创建策略,上述的情况只能在表已创建之后才可能发生。

在细粒度审计中,审计更加灵活 — 仅当访问某些列,当某个特定的条件为真时等等。这种多功能性在您需要控制线索的增长时非常方便。

在 细粒度审计 中,SQL 赋值变量默认被捕获。在常规审计中,必须把初始化参数 audit_trail设为 db_extended,以启用这一功能。

权限上的差异:常规审计需要审计系统或语句权限;细粒度审计只需要 dbms_fga 程序包上的运行权限。

根据需求定义,采用对象审计功能。如果需求审计到具体表中的记录,可使用细粒度审计来实现。

在这里,使用对象审计功能来实现我们的项目需求。

2       实现方法

2.1    修改初始化参数AUDIT_TRAIL。

Alter system set audit_trail=DB scope=spfile;

或者手工修改数据库初始化文件。

1.1    AUDIT_TRAIL

Parameter typeString

SyntaxAUDIT_TRAIL = {NONE | FALSE | DB | TRUE | OS}

Default valueThere is no default value.

Parameter classStatic

AUDIT_TRAIL enables or disables the automatic writing of rows to the audit trail.

Values:

•NONE or FALSE

Audit records are not written.

•OS

Enables system-wide auditing and causes audited records to be written to the operating system's audit trail.

•DB or TRUE

Enables system-wide auditing and causes audited records to be written to the database audit trail (the SYS.AUD$ table).

2.2    检查是否存在sys.aud$表

Select * from sys.aud$;

如果不存在,需要使用ORACLE系统提供的脚本cataaud.sql创建。

2.3    重启数据库,使修改参数生效

Shutdown immediate;

Startup open;

Show parameter audit_trail;

SQL> connect / as sysdba

已连接。

SQL> show parameter audit_trail

NAME                                 TYPE        VALUE

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

audit_trail                          string      DB_EXTENDED

SQL>

2.4    检查审计相关视图,确认是否存在审计项目。

Select * from dba_stmt_audit_opts;

Select * from dba_priv_audit_opts;

Select * from dba_obj_audit_opts;

如果上述结果为空,则表示数据库中无任何要审计的内容。

2.5    AUDIT审计功能使用。

Audit select on scott.emp

审计scott模式中emp表,所有这个查询这个表的操作都被对象审计功能记录在sys.aud$表中。

Audit使用语法如下:

AUDIT

{ sql_statement_clause | schema_object_clause | NETWORK }

[ BY { SESSION | ACCESS } ]

[ WHENEVER [ NOT ] SUCCESSFUL ] ;

缺省值为audit *** by session whenever successful

2.6    检查审计结果视图。

查询sys.aud$表或者dba_audit_trail视图,可得到审计结果记录。

Aud$表的记录会一直增大,而该表所在的表空间为system表空间。System表空间满会导致数据库挂起。所以,在数据库审计功能打开后,需要时刻关注aud$表的增长情况。

可移动aud$表到其他表空间,以避免system表空间满导致数据库系统挂起的问题。

Aud$表中的记录也需要定期清除,使用命令truncate table aud$;。

Aud$表结构如下:

SQL> desc aud$;

NameTypeNullable

SESSIONIDNUMBER

ENTRYIDNUMBER

STATEMENTNUMBER

TIMESTAMP#DATEY

USERIDVARCHAR2(30)Y

USERHOSTVARCHAR2(128)Y

TERMINALVARCHAR2(255)Y

ACTION#NUMBER

RETURNCODENUMBER

OBJ$CREATORVARCHAR2(30)Y

OBJ$NAMEVARCHAR2(128)Y

AUTH$PRIVILEGESVARCHAR2(16)Y

AUTH$GRANTEEVARCHAR2(30)Y

NEW$OWNERVARCHAR2(30)Y

NEW$NAMEVARCHAR2(128)Y

SES$ACTIONSVARCHAR2(19)Y

SES$TIDNUMBERY

LOGOFF$LREADNUMBERY

LOGOFF$PREADNUMBERY

LOGOFF$LWRITENUMBERY

LOGOFF$DEADNUMBERY

LOGOFF$TIMEDATEY

COMMENT$TEXTVARCHAR2(4000)Y

CLIENTIDVARCHAR2(64)Y

SPARE1VARCHAR2(255)Y

SPARE2NUMBERY

OBJ$LABELRAW(255)Y

SES$LABELRAW(255)Y

PRIV$USEDNUMBERY

SESSIONCPUNUMBERY

NTIMESTAMP#TIMESTAMP(6)Y

PROXY$SIDNUMBERY

USER$GUIDVARCHAR2(32)Y

INSTANCE#NUMBERY

PROCESS#VARCHAR2(16)Y

XIDRAW(8)Y

AUDITIDVARCHAR2(64)Y

SCNNUMBERY

DBIDNUMBERY

SQLBINDCLOBY

SQLTEXTCLOBY

dba_audit_trail视图结构如下:

NameComments

OS_USERNAMEOperating System logon user name of the user

whose actions were audited

USERNAMEName (not ID number) of the user

whose actions were audited

USERHOSTClient host machine name

TERMINALIdentifier for the user's terminal

TIMESTAMPDate/Time of the creation of the audit trail entry

(Date/Time of the user's logon for entries created by AUDIT SESSION)

in session's time zone

OWNERCreator of object affected by the action

OBJ_NAMEName of the object affected by the action

ACTIONNumeric action type code.

The corresponding name of the action type

(CREATE TABLE, INSERT, etc.)

is in the column ACTION_NAME

ACTION_NAMEName of the action type corresponding

to the numeric code in ACTION

NEW_OWNERThe owner of the object named

in the NEW_NAME column

NEW_NAMENew name of object after RENAME,

or name of underlying object

(e.g. CREATE INDEX owner.obj_name

ON new_owner.new_name)

OBJ_PRIVILEGEObject privileges granted/revoked

by a GRANT/REVOKE statement

SYS_PRIVILEGESystem privileges granted/revoked

by a GRANT/REVOKE statement

ADMIN_OPTIONIf role/sys_priv was granted

WITH ADMIN OPTON, A/-

GRANTEEThe name of the grantee specified

in a GRANT/REVOKE statement

AUDIT_OPTIONAuditing option set

with the audit statement

SES_ACTIONSSession summary.

A string of 12 characters,

one for each action type,

in thisorder: Alter, Audit,

Comment, Delete, Grant, Index,

Insert, Lock, Rename, Select,

Update, Flashback.

Values:  "-" = None, "S" = Success,

"F" = Failure, "B" = Both

LOGOFF_TIMETimestamp for user logoff

LOGOFF_LREADLogical reads for the session

LOGOFF_PREADPhysical reads for the session

LOGOFF_LWRITELogical writes for the session

LOGOFF_DLOCKDeadlocks detected during the session

COMMENT_TEXTText comment on the audit trail entry.

Also indicates how the user was authenticated.

The meth od can be one of the following:

1. "DATABASE" - aut hentication was done by pass word.

2. "NETWORK"  - aut hentication was done by Net8

or the Advanced Networking Option.

3. "PROXY"    - the client was authenticated by another user.

The name of the proxy user follo ws the method type.

SESSIONIDNumeric ID for each Oracle session

ENTRYIDNumeric ID for each audit trail entry in the session

STATEMENTIDNumeric ID for each statement run

(a statement may cause many actions)

RETURNCODEOracle error code generated by the action.

Zero if the action succeeded

PRIV_USEDSystem privilege used to execute the action

CLIENT_IDClient identifier in each Oracle session

ECONTEXT_IDExecution Context Identifier for each action

SESSION_CPUAmount of cpu time used

by each Oracle session

EXTENDED_TIMESTAMPTimestamp of the creation of audit trail entry

(Timestamp of the user's logon for entries created by AUDIT SESSION)

in session's time zone

PROXY_SESSIONIDProxy session serial number,

if enterprise user has logged through proxy mechanism

GLOBAL_UIDGlobal user identifier for the user,

if the user had logged in as enterprise user

INSTANCE_NUMBERInstance number as specified

in the initialization parameter file 'init.ora'

OS_PROCESSOperating System process identifier

of the Oracle server process

TRANSACTIONIDTransaction identifier of the transaction

in which the object is accessed or modified

SCNSCN (System Change Number) of the query

SQL_BINDBind variable data of the query

SQL_TEXTSQL text of the query

2.7    解除对象的审计功能

在确认审计结束后,务必解除该对象的审计功能。命令如下:

Noaudit select on scott.emp;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值