我正在使用Server 2014,标准版。我的目标是跟踪表上操作的历史(插入、更新、删除),并在web上显示,这样用户就能够知道过去发生了什么事情。
因此,我了解到部分支持审计功能,并且能够记录一些操作,如附件所示。

我的问题是,如何将这些日志存储在适当的Sql表中,以便能够在网页上访问、检索和显示记录?
当前,审计目标允许:文件、安全日志、应用程序日志.似乎无法直接从ASP.NET API中检索。
是否可以登录到SQL表?
(如果我错了,请纠正我)。许多人说,标准版只允许服务器级审核,而不允许数据库级审核。但是,由于一些未知的原因,如果我添加了这7种审计类型(是的,7种或0种),我就能够捕获和查看数据库级的操作。

发布于 2016-10-05 09:59:18
在单个表上捕获DML操作是标准版中不可用的审计功能之一。
如果要跟踪DML操作,另一个可能的挂钩是扩展事件。您将无法使用审核包,但是可以使用锁定获取的事件来捕获读和写操作。
我在这里写了博客:https://spaghettidba.com/2015/04/20/tracking-table-usage-and-identifying-unused-objects/
其他选择包括:
发布于 2016-10-05 10:56:36
我使用以下技术捕获审计日志并将它们存储在表中。也许你可以根据你的需要来调整它。我们实际上使用的是企业版,因此我们可能能够捕获比标准中可用的更多的内容。
sys.fn_get_audit_file处理审计文件的存储过程(下面是一个示例)。创建代理作业以定期运行捕获存储过程(我们每分钟运行一次)。sys.fn_get_audit_file读取审计文件,并将信息插入历史记录表。还可以包括一个WHERE子句,以限制从审核文件中选择的信息。然后,我们再次调用Powershell来删除“暂存”审计文件。以下是存储过程:
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发布于 2022-11-08 18:44:35
你可以看看Logbinder。它们有不同的保存选项,如Windows安全日志、syslog、文本文件或自定义Windows事件日志。https://www.logbinder.com/Products/LOGbinderSQL/
https://dba.stackexchange.com/questions/151453
复制相似问题