是否可以配置 SQL Server 数据库将登录(成功和失败)的审核信息写入可查询的数据库表中?
要求是能够生成包含以下内容的月度报告:
日期/时间
登录名
用户名
源主机名(即连接来自的设备)
源用户名(连接来自的设备上的用户名)
理想情况下,我们可以捕获该数据,将其保存在某个表中,并每月查询它以获取报告。
SQL Server Audit 似乎不允许我在表中捕获它——它似乎是一个文件、安全日志或应用程序日志,而我的 Google Fu 还不够强大,无法找到任何满足要求的东西。
缺少登录触发器来询问会话并将连接尝试记录在可以稍后查询的表中,是否还有其他可用选项?
登录审核通过 SSMS 工作室或 T-SQL 提供的选项进行设置。您可以记录成功或失败或两者兼而有之。推荐的目的地是可以使用 PowerShell 查询或导出的 Windows 事件日志。
这会快速填满您的事件日志,因为许多服务帐户每分钟连接多次。
可以创建更具选择性的审计策略。从这里
你也可以做一个系统触发器,但是当审计策略可以完成这项工作时,为什么还要麻烦呢?
如果您正在谈论与数据库的连接,您可以使用扩展事件(或跟踪)并运行将从其创建的文件中读取的作业以将数据存储到表中。(与此类似: https ://www.brentozar.com/archive/2015/01/query-extended-events-target-xml/
如果您正在谈论登录到实例,并且您已经将成功和失败的登录捕获到 SQL 错误日志中,则可以改为从错误日志中读取 (sp_readerrorlog) 并将其保存到表中。
这两个选项都可以编写脚本并在 SQL 作业中运行,以便您不断更新表。
像这样的东西可以作为脚本的基础:
当日志表中有大量数据时,不要忘记添加一些索引以使其快速运行。