San*_* KB 3 sql-server sql-server-2012 dac
有什么方法可以找到谁使用了专用管理连接?
不是活动连接而是前一个已经关闭的连接?
Aar*_*and 16
SQL Server 不会在任何地方维护此信息;如果您试图抓住滥用 DAC 的人,要么从显然不应该拥有它的人手中夺走系统管理员,要么至少设置某种轮询机制来抓住他们。你可以有一个这样的表:
CREATE TABLE dbo.DBA_DacAccess
(
ConnectTime datetime,
FirstObservance datetime2 NOT NULL DEFAULT SYSUTCDATETIME(),
LoginName sysname,
HostName sysname,
AppName sysname,
Interface nvarchar(32),
ClientNetAddress nvarchar(48)
);
Run Code Online (Sandbox Code Playgroud)
然后确定一些合理的时间间隔以在存在 DAC 连接时收集有关 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
);
Run Code Online (Sandbox Code Playgroud)
这将继续有效,但是如果他们快速进出,您必须很幸运(或经常轮询)才能抓住它们,因此您可能需要微调该时间表。此外,如果您想知道为什么这不是LOGON TRIGGER
,有两个原因:(1) DAC 根据设计和必要绕过这些,以及 (2) 这些 DMV 中的行/数据在它们逃脱触发器之前不存在反正。
对于过去的事件,如果幸运的话,尝试从 SSMS 访问 DAC 的人将被尝试再次连接的后台连接咬住,因为失败的尝试将被写入错误日志,并且IP 地址附加到消息的末尾(但不包含任何其他信息)。如果有人使用远程桌面连接到服务器,或者使用非 SSMS 的应用程序不尝试使用相同的ADMIN:
凭据建立其他连接,这将无济于事,但如果他们远程使用 SSMS,则应该很有用:
04/23/2018 08:11:18 未知
登录 无法连接,因为“1”专用管理员连接的最大数量已经存在。在建立新连接之前,必须通过注销或结束进程来删除现有的专用管理员连接。[客户:192.168.0.99]