SQLServer Audit开启审核记录某表的DML操作

来源:这里教程网 时间:2026-03-02 11:05:06 作者:

1.创建SQLServer审计

USE master

GO

CREATE SERVER AUDIT Audit_test_db

  TO FILE (FILEPATH = 'D:\sqlserver\sqlaudit', MAXSIZE = 1 GB)  --注意更改文件路径

  WITH (ON_FAILURE = CONTINUE)

GO

 

USE TEST_DB

GO

create table t_zyx(id int,name nvarchar(10))

go

 

CREATE DATABASE AUDIT SPECIFICATION audit_t_zyx FOR SERVER AUDIT Audit_test_db

 ADD(UPDATE,INSERT,DELETE ON object::dbo.t_zyx by public)

with (state=on)

GO  

3.激活SQLServer审计

USE master

GO

ALTER SERVER AUDIT Audit_test_db

WITH (STATE=ON)

 

USE TEST_DB

GO

ALTER DATABASE AUDIT SPECIFICATION audit_t_zyx WITH (STATE=ON)  

4.查看审计数据

SELECT event_time ,

        succeeded ,

    server_principal_name ,

        [object_name] ,

        [statement]

FROM sys.fn_get_audit_file('D:\sqlserver\sqlaudit\*', NULL, NULL)

WHERE database_name = 'TEST_DB'

GO    

5.DML语句测试

USE TEST_DB

GO

select * from t_zyx

go

insert t_zyx values(1,'zhong1')

go

insert t_zyx values(2,'zhong2')

go

update t_zyx set name='server' where id=1

go

select * from t_zyx

 

 

SELECT event_time ,

        succeeded ,

    server_principal_name ,

        [object_name] ,

        [statement]

FROM sys.fn_get_audit_file('D:\sqlserver\sqlaudit\*', NULL, NULL)

WHERE database_name = 'TEST_DB'

GO

 

 

SELECT * FROM sys.fn_get_audit_file('D:\sqlserver\sqlaudit\*', default, default)          

declare @i int

set @i=1

while @i<100

begin

set @i=@i+1

insert t_zyx values(@i,'xue') end    

SELECT event_time ,

       action_id,

        succeeded ,

        session_id,

        server_principal_id,

        session_server_principal_name,

        server_principal_name ,

        server_instance_name,

        database_name,

        [object_name] ,

        [statement]

FROM sys.fn_get_audit_file('D:\sqlserver\sqlaudit\*', default, default)

WHERE database_name = 'TEST_DB'

GO      

6.附 查询语句

SELECT  [event_time] AS '触发审核的日期和时间' ,

        sequence_number AS '单个审核记录中的记录顺序' ,

        action_id AS '操作的ID' ,

        succeeded AS '触发事件的操作是否成功' ,

        permission_bitmask AS '权限掩码' ,

        is_column_permission AS '是否为列级别权限' ,

        session_id AS '发生该事件的会话的ID' ,

        server_principal_id AS '执行操作的登录上下文ID' ,

        database_principal_id AS '执行操作的数据库用户上下文ID' ,

        target_server_principal_id AS '执行GRANT/DENY/REVOKE 操作的服务器主体' ,

        target_database_principal_id AS '执行GRANT/DENY/REVOKE 操作的数据库主体' ,

        object_id AS '发生审核的实体的ID(服务器对象,DB,数据库对象,架构对象)' ,

        class_type AS '可审核实体的类型' ,

        session_server_principal_name AS '会话的服务器主体' ,

        server_principal_name AS '当前登录名' ,

        server_principal_sid AS '当前登录名SID' ,

        database_principal_name AS '当前用户' ,

        target_server_principal_name AS '操作的目标登录名' ,

        target_server_principal_sid AS '目标登录名的SID' ,

        target_database_principal_name AS '操作的目标用户' ,

        server_instance_name AS '审核的服务器实例的名称' ,

        database_name AS '发生此操作的数据库上下文' ,

        schema_name AS '此操作的架构上下文' ,

        object_name AS '审核的实体的名称' ,

        statement AS 'TSQL 语句(如果存在)' ,

        additional_information AS '单个事件的唯一信息,以XML 的形式返回' ,

        file_name AS '记录来源的审核日志文件的路径和名称' ,

        audit_file_offset AS '包含审核记录的文件中的缓冲区偏移量'

      -- , user_defined_event_id AS '作为sp_audit_write 参数传递的用户定义事件ID' ,

      --  user_defined_information AS '于记录用户想要通过使用sp_audit_write 存储过程记录在审核日志中的任何附加信息'

FROM    sys.[fn_get_audit_file]('D:\sqlserver\sqlaudit\Audit_test_db_8CC59D08-35A1-4EA4-8244-343E3D20F1FE_0_131172529126400000.sqlaudit',

                                DEFAULT, DEFAULT)

WHERE   [event_time] BETWEEN '2016-09-01 11:02:00'                      AND     '2016-09-04 11:18:00'  

相关推荐