2008年7月19日星期六

sybase审计

审计数据库是跟踪审计sybase数据库系统的有利工具,但其配置和使用过程较为复杂。下面是一个sybase数据库系统中使用跟踪和审计的例子。
其过程如下:

安装审计数据库;
创建阈值存储过程转移审计记录,清空审计表;
设置审计选项;
查询审计跟踪。
下面的实验,你将首先安装审计数据库,并在此基础上增加阈值过程防止审计表填满,通过若干的示例掌握审计选项的设置方法,最后介绍审计记录查询技巧。

实验环境:系统中存在用户数据库aca_db,并具有sa_role和sso_role角色

具体步骤如下:

1、安装审计(创建审计设备)

disk init name = "auditdev",

physname = "d:\sybase\example\sybaud.dat",

vdevno = 8, size = 5120

disk init name = "auditlogdev",

physname = “d:\sybase\example\syblg.dat”,

vdevno = 9, size = 1024

2、 安装审计(创建审计数据库)

create database sybsecurity on auditdev

log on auditlogdev

3、 安装审计(运行安装脚本)

c:\> isql -usa -ppassword -sserver_name –iinstsecu

4、 安装审计(重新启动sybase adaptive server)

安装审计后,直到系统管理员或安全管理员通过审计系统过程启用了审计时,才会进行审计。

5、 安装审计(在sybsecurity中创建多个sysaudits表)

disk init name = "auditdev3",

physname = "d:\sybase\example\auditdevw3.dat",

vdevno = 11, size = 5120

alter database sybsecurity on auditdev3 = 2

use sybsecurity

sp_addaudittable auditdev3

6、 设置阈值过程

启用审计之前,建立一个阈值过程,以在当前表时切换审计表。

create proc audit_thresh

as

declare @audit_table_number int

select @audit_table_number = value

from master.dbo.sysconfigures

where name = "current audit table"

exec sp_configure "current audit table", 0, "with truncate"

if @audit_table_number = 1

begin

insert aud_db.dbo.audit_data

select * from sysaudits_01

truncate table sysaudits_01

end

else if @audit_table_number = 2

begin

insert aud_db.dbo.audit_data

select * from sysaudits_02

truncate table sysaudits_02

end

else if @audit_table_number = 3

begin

insert aud_db.dbo.audit_data

select * from sysaudits_03

truncate table sysaudits_03

end

return(0)

7、 将阈值过程添加到每个审计段

use sybsecurity

go

sp_addthreshold sybsecurity, aud_seg_01, 250,

audit_thresh

… …

… …

go

到此,启用审计后,adaptive server将所有审计数据写入最初的当前审计表sysaudits_01中。sysaudits_01中还有250页便会充满时,阈值过程audit_thresh触发。此过程切换当前审计表为sysaudits_02,并且adaptive server立即开始将新的审计纪录写入sysaudits_02,此过程还将sysaudit_01中的所有审计数据复制到audit_db数据库中。

8、 设置审计配置参数

一个审计记录需要的内存大小为424字节,审计队列的的缺省大小为100条记录

sp_onfigure "audit queue size", 300

sp_configure "suspend audit when device full",[0|1]

9、 启用和禁止审计

sp_configure “auditing”,[0|1]

1 启用审计 0 禁用审计

10、设置全局审计选项

sp_audit option , login_name , object_name [,setting]

审计选项

全局选项:应用于影响整个服务器的命令,例如启动服务器、磁盘操作和允许用户定义即席审计记录的命令。设置存储在sysbsecurity..sysauditoption系统表中。

数据库选项:应用于数据库,例如更改数据库、批量复制数据、授予或撤销对数据库中对的访问权以及在数据库中创建对象。数据库特定的事件的审计选项设置存储在master..sysdatabases中。

对象权限:如选择、插入、更新或删除特定表或视图的以及执行触发器或过程。对象特定事件的选项设置在相应数据库的sysobjects系统表中。

用户选项:应用于特定用户或系统角色,例如特定用户对任何表或视图的访问。单个用户的选项设置存储在master..syslogins中。系统角色的设置存储在master..sysauditoptions中。

请耐心继续下面的实验,会对你收获巨大:

(1) sp_audit "adhoc", "all", "all", "on"

说明:启用用户定义的即席审计记录

(2) sp_audit “all”,”sa_role”,”all”,”on”

说明:为所有已激活了sa_role角色的操作打开审计

(3) sp_audit @option = "alter", @login_name = "all",

@object_name = "master", @setting = "on"

说明:为master数据库中执行的所有alter database和alter table打开审计

(4) sp_audit "bcp", "all", "aca_db"

说明:返回aca_db数据库中bcp审计的状态

(5) sp_audit "create", "all", "aca_db", "pass"

说明:关闭对aca_db数据库中成功的对象创建的审计

(6) sp_audit “disk”,”all”,”all”,”on”

说明:审计服务器所有的磁盘操作

(7) sp_audit “dump”,”all”,”aca_db”,”on”

说明:审计aca_db数据库的转储命令

(8) sp_audit "update", "all", "auths", "on"

说明:对用户更新当前数据库中auths表的所有尝试进行审计

(9) sp_audit "table_access", "smithson", "all", "on"

说明:审计由登录名为“smithson”执行的。对表的所有访问

(10) sp_audit "dbcc", "all", "all", "on"

审计dbcc命令的所有执行情况。

10、 查询审计跟踪

审计表的构成

列名
数据类型
说明

event
smallint
正被审计的事件的类型

eventmod
smallint
关于正被审计的事件的详细信息

0=事件无修改者

1=事件通过了权限检查

2=事件未通过权限检查

spid
smallint
引起写入审计记录的进程的id

eventtime
datetime
审计事件发生的日期和时间

sequence
smallint
单个事件中记录的序列号。

suid
smallint
执行审计事件的用户的服务器登录id

objid
int null
被访问的对象、存储过程或触发器的id

xactid
binary(6)null
包含被审计事件的事务的id。

loginname
varchar(30)null
与suid相应的登录名

dbname
varchar(30)null
与dbid相应的数据库名

objname
varchar(30)null
与objid相应的对象名

objowner
varchar(30)null
objid的所有者名

extminfo
varchar(255)null
有关被审计的其它信息。


查询审计跟踪实验:

1) 假设审计数据位于audit_db数据库中名为audit_data的表中。要选择由“bob”于1999年7月5日所执行的审计记录

use audit_db

go

select * from audit_data

where loginname = "bob"

and eventtime like "jul 5% 93"

go

2) 下面的命令请求aca_db数据库中由具有sso_role角色的用户所执行命令的审计记录

select * from audit_data

where extrainfo like “%sso_role%

and dbname = "pubs2"

go

3) 下面的命令请求所有表截断(事件64)的审计记录

select *from audit_data where event=64

go

没有评论: