我处于一种我应该怀疑每个人(甚至我的开发团队和数据库管理员)的情况,所以我想记录对我的服务器进行的所有登录。
我有两个 SQL Server,比如 A 和 B。我想在服务器 B 中使用服务器 A 的登录触发器记录所有登录,重要的是我的数据库能够将日志插入 A,但它不应该删除或更新 B 上的访问权限。
我想要创建日志,但我不信任我的 sa 或其他对 A 具有完全访问权限的人。
简而言之,服务器 A 可以插入日志但不能做更多的事情,当我想监视 A 上的登录时,唯一可能的解决方案应该是在 B 上进行。
我怎样才能实现这种情况?
理想情况下,如果您使用的是企业版,那么正如 Shawn 提到的,您可以使用 SQL Server Audit。
您甚至可以设置轻量级服务器端跟踪,然后定义WMI 事件通知-
TRACE_FILE_CLOSE
以在翻转时自动将跟踪数据加载到表中。另一种选择是 - 您可以使用我发布的登录触发器脚本。请注意,它不适用于现有连接,并且它是登录触发器的限制。所有新连接都将通过登录触发器。
您可以通过将登录表复制到服务器 B(在您的情况下)来使用事务复制。确保选择 - Do not replicate DDL changes 选项。
您可以使用链接服务器创建一个视图,并只授予该视图的选择权限。这样您就可以控制谁可以访问信息。
作为旁注,请确保您没有在视图中返回完整的数据集,而只是将其限制在最近 10 -15 天的登录审核中,因此当用户查询数据时,它只会返回少量数据.
如果您使用的是企业版,则 SQL Server 审计是您的最佳选择,任何低于(标准)的版本都不允许数据库级别的审计。
但是,您也可以设置扩展事件会话以在数据库级别为您进行审计。您可以将目标设置为文件或环形缓冲区。环形缓冲区需要定期轮询才能将数据持久保存到表中,因此对于归档文件目标可能会更好。然后您可以将其设置为滚动,然后将文件存档到一个表中以便于报告。