然后确定一些合理的时间间隔以收集有关 DAC 连接的信息(只要存在),然后以该频率运行以下命令(可能使用 SQL Server 代理作业):
INSERT dbo.DBA_DacAccess
(
ConnectTime,
LoginName,
HostName,
AppName,
Interface,
ClientNetAddress
)
SELECT
c.connect_time,
s.login_name,
s.[host_name],
s.[program_name],
s.client_interface_name,
c.client_net_address
FROM sys.dm_exec_connections AS c
INNER JOIN sys.dm_exec_sessions AS s
ON c.session_id = s.session_id
WHERE c.endpoint_id = 1
AND NOT EXISTS
(
SELECT 1 FROM dbo.DBA_DacAccess
WHERE connect_time = c.connect_time
);
这将继续工作,但如果他们快速进出,您必须很幸运(或经常轮询)才能抓住他们,因此您可能需要微调该时间表。此外,如果您想知道为什么这不是 a LOGON TRIGGER,有两个原因:(1)DAC 通过设计和必要性绕过这些,以及(2)这些 DMV 中的行/数据在它们逃脱触发器之前不会存在反正。
SQL Server 不会在任何地方维护这些信息。如果您试图抓住滥用 DAC 的人,要么从显然不应该拥有它的人手中夺走系统管理员,要么至少设置某种轮询机制来抓住他们。你可以有一个这样的表:
然后确定一些合理的时间间隔以收集有关 DAC 连接的信息(只要存在),然后以该频率运行以下命令(可能使用 SQL Server 代理作业):
这将继续工作,但如果他们快速进出,您必须很幸运(或经常轮询)才能抓住他们,因此您可能需要微调该时间表。此外,如果您想知道为什么这不是 a
LOGON TRIGGER
,有两个原因:(1)DAC 通过设计和必要性绕过这些,以及(2)这些 DMV 中的行/数据在它们逃脱触发器之前不会存在反正。对于过去的事件,如果幸运的话,尝试从 SSMS 访问 DAC 的人将被尝试再次连接的后台连接所困扰,因为失败的尝试将被写入错误日志,并且IP 地址附加到消息的末尾(但不包括任何其他信息)。如果有人使用远程桌面到服务器,或者 SSMS 以外的应用程序不尝试使用相同的凭据建立额外的连接,这将无济于事
ADMIN:
,但如果他们远程使用 SSMS 应该很有用: