如何修复 RegCreateKeyEx() 返回错误 5,“访问被拒绝。”在 SQL Server 2017 中

Posted

技术标签:

【中文标题】如何修复 RegCreateKeyEx() 返回错误 5,“访问被拒绝。”在 SQL Server 2017 中【英文标题】:How to fix RegCreateKeyEx() returned error 5, 'Access is denied.' in SQL Server 2017 【发布时间】:2019-03-29 11:59:52 【问题描述】:

我正在尝试在 SQL Server 2017 中使用以下命令将身份验证模式更改为混合模式:

EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', 
                 N'SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQLServer', 
                 N'LoginMode', REG_DWORD, 2

到目前为止我已经执行了这个命令:

EXEC sp_addsrvrolemember 'NT AUTHORITY\SYSTEM', 'sysadmin';
GRANT EXECUTE ON xp_instance_regwrite TO public

重新启动 SQL 服务后,我仍然收到此错误:

RegCreateKeyEx() 返回错误 5,“访问被拒绝。”

我已将所有权限授予 SQL 中的所有用户,这与 SQL 或 Windows 有关吗?我该如何解决?

【问题讨论】:

***.com/questions/29712281/… xp_regread() returned error 5, 'Access is denied.'的可能重复 不重复,请仔细阅读 仔细阅读表明您在使用 xp_instance_regwrite 时不恰当地将实例名称 (MSSQL14.MSSQLSERVER) 添加到密钥中。链接的问题演示了正确使用。 【参考方案1】:

为了工作,我必须更改执行 SQL 后台服务的用户。单击 Windows -> 搜索 Services 并找到 MS SQL Server 并右键单击并更改属性,在此您可以将 sql 用户更改为具有管理员权限的人。不是最好的方法,但确实有效。

【讨论】:

我不知道“SQL后台服务”是什么,但是更改SQL Server、SQL Agent和其他SQL Server启动帐户需要使用SQL Server配置管理器。通过 services.msc 更改启动帐户不会分配所需的注册表权限。稍后使用 services.msc 可能会导致对密钥的访问被拒绝。我并不是说这里发生了这种情况——我只是为以后阅读这篇文章的人添加一个“买者自负”的警告。

以上是关于如何修复 RegCreateKeyEx() 返回错误 5,“访问被拒绝。”在 SQL Server 2017 中的主要内容,如果未能解决你的问题,请参考以下文章

> 使用 RegCreateKeyEx() 的 Windows 可执行文件不提示输入 UAC 管理员权限并失败? [复制]

RegCreateKeyEx() 创建的密钥是不是打开?

RegCreateKeyEx 和 RegOpenKeyEx 成功但 RegSetValueEx 无法设置值

关于RegCreateKeyEx函数的用法(+50分)

XFS 分区损坏修复方法

JS常见报错与修复