我正在研究 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,您可以看到在审计开始时出现的相关结构。
select * from sys.dm_server_audit_status
select * from sys.dm_xe_session_events
select * from sys.dm_xe_session_targets
Run Code Online (Sandbox Code Playgroud)
请注意,审计有自己的一组特殊目标,不能通过扩展事件直接使用。如果您开始生成一些审计事件,您将看到这些事件显示在实际目标中,但与环形缓冲区目标不同,target_data
出于安全原因,它们不会出现在DMV的列中。
话虽如此,但审计会话目标如何在内部工作尚不清楚(并且显然没有记录)。基于审计建立在扩展事件上的事实,并考虑到审计失败时的行为选项,我假设审计目标只是修改后的环形缓冲区目标,不会将事件数据暴露回 SQL Server。虽然这个解释对我来说最有意义,但老实说我不是 100% 确定。希望有更多内部知识的人可以发表评论。
我可以查询该位置以查看队列中有多少项目吗?
据我所知,不知道;再次,可能是出于安全原因。
如果将 ON_FAILURE 选项设置为关闭服务器,一旦服务器重新启动并且可以再次访问该位置,这些项目是否会被记录到审计中?
有许多场景无法记录事件。如果我关于命中内存缓冲区的假设是正确的,那么失败的事件将被丢弃在地板上,因为关闭将释放所有 SQL Server 内存。任何未写入磁盘的内容都将丢失。
归档时间: |
|
查看次数: |
2072 次 |
最近记录: |