在 SQL Server Express 上启用管理员连接以修复登录触发器

Rac*_*SQL 5 trigger sql-server sql-server-express dac

好吧,幸运的是我在我的测试环境中遇到了这个错误。我非常害怕这个错误,以至于我禁用了我在生产环境中使用的所有登录触发器。

我创建了著名的登录触发器,并将数据库置于离线模式,只是为了处理其他事情。然后我发现因为触发器找不到表,所以我不能再访问实例了。有很多与此相关的问题,但即使做了我能找到的一切,我仍然无法访问该实例,即使使用 SQLCMD 也无法访问。

我这样做:

sqlcmd -S server\instance -U sa -P <pass>  -A
Run Code Online (Sandbox Code Playgroud)

如果我不使用,-A我会收到著名的错误:

logon failed for sa due trigger execution.
Run Code Online (Sandbox Code Playgroud)

如果我使用-A

Sqlcmd:错误:Microsoft ODBC Driver 11 for SQL Server:SQL Server 网络接口:获取专用管理员连接 (DAC) 端口时出错。确保 SQL Browser 正在运行,或检查端口号 [xFFFFFFFF] 的错误日志。. Sqlcmd:错误:用于 SQL Server 的 Microsoft ODBC 驱动程序 11:登录超时已过期。Sqlcmd:错误:Microsoft ODBC Driver 11 for SQL Server:建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。检查实例名称是否正确以及 SQL Server 是否配置为允许远程连接。有关详细信息,请参阅 SQL Server 联机丛书。

为什么我无法连接到sql server

sql server express 在这里。

我可以启用 SQL Browser,但我仍然无法访问它。

我不认为这个问题是重复的,因为不是关于触发器,而是关于为什么我无法使用 SQLCMD 访问服务器。我几乎知道如何解决这个问题。我只是不知道如何在不触发触发器的情况下访问 sql server。

Sol*_*zky 6

“数据库管理员诊断连接”的文档指出:

  • 为了节省资源,SQL Server Express 不会侦听 DAC 端口,除非以跟踪标志 7806 启动。

如果您通过命令行启动 SQL Server,则需要在命令行上指定该 TF;如果您通过服务界面启动,则需要在注册表中指定该 TF(典型方法)。

要将其放入注册表:

  1. 打开命令提示符
  2. 运行注册表
  3. 导航到以下键:

    计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL{version_number}.{instance_name}\MSSQLServer\Parameters

    其中{version_number}是版本号的 2 位数字,例如 SQL Server 2012 为“11”,SQL Server 2017 为“14”。

  4. 添加以下字符串值:

    SQLArg3

  5. 编辑新的字符串值以提供以下值数据:

    -T7806

    请注意:“T”要大写,“-T”和数字之间不能有空格!