You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

更改SQL Server身份验证模式失败,报错229及EXECUTE权限被拒

解决SQL Server 2016 Express修改身份验证模式时Error 229的问题

这个问题我之前帮不少开发者处理过,核心原因是你用来修改设置的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

火山引擎 最新活动