首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Server如何将审核日志转换为表?

Server如何将审核日志转换为表?
EN

Database Administration用户
提问于 2016-10-05 08:30:20
回答 3查看 9.4K关注 0票数 4

我正在使用Server 2014,标准版。我的目标是跟踪表上操作的历史(插入、更新、删除),并在web上显示,这样用户就能够知道过去发生了什么事情。

因此,我了解到部分支持审计功能,并且能够记录一些操作,如附件所示。

我的问题是,如何将这些日志存储在适当的Sql表中,以便能够在网页上访问、检索和显示记录?

当前,审计目标允许:文件、安全日志、应用程序日志.似乎无法直接从ASP.NET API中检索。

是否可以登录到SQL表?

P.S.:

(如果我错了,请纠正我)。许多人说,标准版只允许服务器级审核,而不允许数据库级审核。但是,由于一些未知的原因,如果我添加了这7种审计类型(是的,7种或0种),我就能够捕获和查看数据库级的操作。

EN

回答 3

Database Administration用户

回答已采纳

发布于 2016-10-05 09:59:18

在单个表上捕获DML操作是标准版中不可用的审计功能之一。

如果要跟踪DML操作,另一个可能的挂钩是扩展事件。您将无法使用审核包,但是可以使用锁定获取的事件来捕获读和写操作。

我在这里写了博客:https://spaghettidba.com/2015/04/20/tracking-table-usage-and-identifying-unused-objects/

其他选择包括:

  • 触发器:这很容易设置,甚至通过生成触发器代码自动设置。缺点是写入开销增加。
  • 应用程序端日志记录:如果您控制了应用程序,您可以注入记录访问表所需的代码。
票数 5
EN

Database Administration用户

发布于 2016-10-05 10:56:36

我使用以下技术捕获审计日志并将它们存储在表中。也许你可以根据你的需要来调整它。我们实际上使用的是企业版,因此我们可能能够捕获比标准中可用的更多的内容。

  • 将您的审核配置为写入文件系统,并将最大大小限制在10 max左右。这将强制在满足该大小时创建新的审计文件。我们使用共享文件夹,因为我们有多个服务器编写审计信息,并且使用一个在单独服务器上运行的捕获过程。
  • 创建一个使用sys.fn_get_audit_file处理审计文件的存储过程(下面是一个示例)。创建代理作业以定期运行捕获存储过程(我们每分钟运行一次)。
  • 存储过程使用Powershell将审计文件从主存储文件夹“移动”到“暂存”文件夹。我们绕过仍被审核过程写入的“锁定”文件,并将在下一个捕获周期中获取它们。存储过程使用sys.fn_get_audit_file读取审计文件,并将信息插入历史记录表。还可以包括一个WHERE子句,以限制从审核文件中选择的信息。然后,我们再次调用Powershell来删除“暂存”审计文件。

以下是存储过程:

代码语言:javascript
复制
CREATE PROCEDURE [dbo].[SqlAuditCaptureAuditLogs]
AS
BEGIN
    SET XACT_ABORT ON

    EXEC xp_cmdshell 'powershell.exe "Move-Item \\<SharedFolder>\SQLAuditLogs-SC\*.sqlaudit \\<SharedFolder>\SQLAuditLogs-SC\SQLAuditLogs_Staging -ErrorAction SilentlyContinue"'
        ,no_output

    INSERT INTO SQLAUDIT.[dbo].[SQLAUDIT_HISTORY] (
        event_time
        ,sequence_number
        ,action_id
        ,server_principal_name
        ,server_instance_name
        ,database_name
        ,schema_name
        ,object_name
        ,statement
        )
    SELECT event_time
        ,sequence_number
        ,action_id
        ,server_principal_name
        ,server_instance_name
        ,database_name
        ,schema_name
        ,object_name
        ,statement
    FROM sys.fn_get_audit_file('<SharedFolder\SQLAuditLogs-SC\SQLAuditLogs_Staging\*.*', DEFAULT, DEFAULT)

    EXEC xp_cmdshell 'powershell.exe "Remove-Item \\<SharedFolder>\SQLAuditLogs-SC\SQLAuditLogs_Staging\*.* -ErrorAction SilentlyContinue"'
        ,no_output
END
票数 5
EN

Database Administration用户

发布于 2022-11-08 18:44:35

你可以看看Logbinder。它们有不同的保存选项,如Windows安全日志、syslog、文本文件或自定义Windows事件日志。https://www.logbinder.com/Products/LOGbinderSQL/

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/151453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档