在玩 SQL Server 时,我遇到了一个半隐秘的错误。本质上,我只需要登录 DAC。对于何时需要 DAC,是否有任何一般性建议?我怎么知道我需要它来访问sys.sysobjvalues而不用谷歌搜索错误消息?
DAC 提供哪些访问权限?
小智 5
DAC(专用管理连接)是(元数据工具)仅用于故障排除目的。如果您无法访问或连接到 SQL Server ,SQL Server DBA会将其用作最后的手段。在某些情况下,某个进程或某人试图使用您所有的系统内存和 CPU,而没有人可以使用 SQL Server(没有新进程可以连接)。
DAC 内置于 SQL Server 2005 中,因为在 SQL Server 2005 之前,如果我们无法访问/连接到 SQL Server,我们要么终止所有会话并重新启动 SQL Server。在 SQL Server 2005 中,Microsoft 决定创建 DAC 用于故障排除(后门)。
当我们作为 DAC(特殊连接)连接时,我们得到了专用处理器(调度程序)和一个保留内存来运行简单的查询。我们需要系统管理员权限才能连接。我们只能通过登录本地服务器进行本地连接并连接(除非您需要对需要远程DAC的集群或AG进行故障排除)。只有 1 个会话可以在 SQL Server 中作为 DAC 连接,在我们断开 DAC 会话之前,没有人可以作为 DAC 连接。
我们可以通过查询来检查是否有人正在使用 DAC:
SELECT dese.session_id
FROM sys.tcp_endpoints as te
JOIN sys.dm_exec_sessions as dese ON te.endpoint_id = dese.endpoint_id
WHERE te.name ='Dedicated Admin Connection';
Run Code Online (Sandbox Code Playgroud)
当我们连接为 DAC 时,我们可以做什么:
我们不能做的:
我们无法在正常连接下查询系统表。
尝试
SELECT * FROM sys.objects WHERE type_desc='SYSTEM_TABLE';Run Code Online (Sandbox Code Playgroud). 这些是您无法在正常连接中查询的表。
当我们作为 DAC 连接时,您可以访问系统表(例如 sys.sysrscols)

最后,作为最佳实践,使用后始终断开 DAC 连接。
我会建议使用SSMS和读的书有关SQL Server的内部和故障排除的SQL Server。它不是 SQL Server 2017 特定的,但大多数概念仍然适用于当前版本的 SQL Server。
来自微软:
重要提示:系统基表仅在 SQL Server 数据库引擎中使用,不供一般客户使用。它们可能会发生变化,并且不保证兼容性。
使用 DAC 访问系统基表仅适用于 Microsoft 人员,它不是受支持的客户方案。