更改SQL Server身份验证模式失败,报错229及EXECUTE权限被拒
这个问题我之前帮不少开发者处理过,核心原因是你用来修改设置的Windows账户没有足够权限执行系统存储过程(具体是xp_instance_regwrite,错误229就是明确的权限拒绝提示)。下面是一步步的解决方法:
第一步:用有权限的账户登录
确保你用Windows身份验证登录SSMS时,使用的是本地管理员组的账户(SQL Server Express默认只有本地管理员拥有最高权限)。第二步:授予系统存储过程执行权限
打开新的查询窗口,执行以下SQL语句,把权限授予你的Windows账户(记得替换成你实际的账户名,格式比如[DESKTOP-ABC123\你的用户名]):USE master; GRANT EXECUTE ON xp_instance_regwrite TO [你的Windows账户名];第三步:重新修改身份验证模式
回到服务器属性窗口,再次选择SQL Server和Windows身份验证模式,点击确定后,按照提示重启SQL Server服务(必须重启才能让设置生效)。备选方案:直接用T-SQL修改
如果图形界面还是有问题,你可以跳过界面,直接用T-SQL完成修改,执行以下语句:USE master; GO EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'LoginMode', REG_DWORD, 2; GO这里的
2代表混合身份验证模式,1则是Windows身份验证模式。执行完成后手动重启SQL Server服务。最后:启用SQL Server管理员账户
重启服务后,别忘了启用并设置sa账户(或者你自己创建的SQL账户),这样以后就能用SQL身份验证登录了:ALTER LOGIN sa ENABLE; GO ALTER LOGIN sa WITH PASSWORD = '你的强密码'; -- 记得替换成符合要求的密码 GO
补充说明
SQL Server Express版默认的权限管控比较严格,即便是本地管理员,有时候也需要显式授予某些系统存储过程的执行权限。图形界面修改身份验证模式时会调用xp_instance_regwrite来修改注册表配置,你的账户刚好缺少这个权限,就触发了Error 229。
内容的提问来源于stack exchange,提问作者user9335731




