我正在研究 SQL Server 审核的工作原理,并希望了解 QUEUE_DELAY 选项的工作原理。BOL 将选项定义为:
确定在强制处理审计操作之前可以经过的时间(以毫秒为单位)。值 0 表示同步传送。可设置的最小查询延迟值为 1000(1 秒),这是默认值。最大值为 2,147,483,647(2,147,483.647 秒或 24 天 20 小时 31 分钟 23.647 秒)。指定无效号码将引发错误 MSG_INVALID_QUEUE_DELAY。
这些操作在哪里排队 tempdb、系统表等?我可以查询该位置以查看队列中有多少项目吗?如果 ON_FAILURE 选项设置为关闭服务器,这些项目是否会在服务器重新启动并且可以再次访问该位置时记录到审核中?
SQL Server 审计利用 2008 年引入的新扩展事件体系结构。
如果您查看以下 DMV,您可以看到启动审计时出现的相关结构。
请注意,审计有自己的一组特殊目标,不能直接通过扩展事件使用。
target_data
如果您开始生成一些审计事件,您会看到这些事件显示在实际目标中,但与环形缓冲区目标不同,出于安全原因,它们不会出现在 DMV 的列中。话虽如此,审计会话目标如何在内部工作还有些不清楚(并且显然没有记录)。基于审计基于扩展事件这一事实,并给出审计失败时的行为选项,我假设审计目标只是修改过的环形缓冲区目标,不会将事件数据公开回 SQL Server。虽然这个解释对我来说最有意义,但老实说,我不是 100% 确定的。希望有更多内部知识的人可以发表评论。
据我所知,不是;再次,可能是出于安全原因。
有许多场景无法记录事件。如果我关于命中内存缓冲区的假设是正确的,那么失败的事件将被丢弃,因为关闭将释放所有 SQL Server 内存。任何没有进入磁盘的东西都会丢失。
SQL Server 将从捕获的数据中对写入进行排队,并且仅在指定的时间量过后才将其写入日志。
我对你的情况很感兴趣。我们编写软件 LOGbinder SQL,它可以翻译 SQL 审计日志并将它们发送到日志管理/SIEM 系统。我们通常建议在运行我们的软件的另一台服务器上使用文件共享,以将对 SQL 服务器的影响降至最低。如果该服务器有一段时间不可用,最好测试一下会发生什么。这涉及使用 SQL 服务器上的本地文件夹。出于性能原因,我们不建议使用 Windows 事件日志。
为队列延迟设置的值通常是安全性和性能之间的折衷。如果发生服务器故障,缓冲区中但尚未刷新到目标的结果将丢失。如果队列延迟设置为零,则同步写入会随着事件的发生而发生。这避免了在服务器故障时丢失事件的机会,但会影响服务器性能。