首页 > 生活经验 >

问 sqlserver 错误 15023 登录用户修复详解

2026-11-12 16:40:02
最佳答案

答

SQL Server 错误 15023 核心是数据库用户和实例登录名之间的 SID 关联失效,也就是常说的孤立用户,提示信息一般是用户或者角色在当前数据库中已经存在,当你尝试把实例级别的登录名映射到数据库用户的时候,因为数据库内部已经存在同名用户,但是这个用户对应的 SID 和现在登录名的 SID 对不上,系统就抛出错误 15023,这个问题最常出现在数据库备份还原 分离附加 迁移数据库 还原到其他实例之后,原来的登录名在新实例里面 SID 不一样,数据库里面保留了旧 SID 的用户,新建映射的时候就冲突,本质不是账号密码错误,是数据库内部用户和服务器登录名绑定关系断裂,修复思路就是先识别孤立用户,然后使用 ALTER USER 语句把现有数据库用户重新关联到新的登录名,不需要删除原有数据库用户,避免误删权限和角色配置。

一 错误产生主要原因清单

第一 数据库从旧实例备份还原到新实例,新实例创建的同名登录名,内部 SID 和旧数据库用户 SID 不一致

第二 数据库分离之后附加到另外一台 SQL Server 服务器

第三 直接删除实例登录名之后又重新创建同名登录名,新登录名 SID 自动生成,和数据库内旧用户 SID 不匹配

第四 跨版本迁移数据库,比如从 2016 还原到 2019,迁移之后原有数据库用户变成孤立用户

第五 手工尝试执行 CREATE USER 关联登录名,数据库已经存在同名用户,触发冲突报错 15023

二 前置检测步骤

第一步 打开 SSMS,连接 SQL Server 实例

第二步 切换到对应的问题数据库,新建查询窗口

第三步 执行检测语句查找孤立用户

EXEC sp_change_users_login Report

第四步 查看返回结果,如果能看到用户名,并且 LoginName 列为空,就是孤立用户,也就是触发错误 15023 的根源

补充 新版 SQL Server 推荐使用 sys.database_principals 系统视图查询,兼容更高版本,不再推荐旧存储过程

三 修复操作步骤

方案一 标准修复 重新映射现有数据库用户

第一步 确认数据库已经存在这个同名用户,不要新建用户

第二步 在当前数据库执行语句

ALTER USER 用户名 WITH LOGIN = 登录名

第三步 执行完成之后,再次运行检测语句,确认孤立用户消失

第四步 测试使用该登录名连接数据库,验证权限是否正常

方案二 如果用户名和登录名不一致场景

如果数据库里面用户名称,和实例登录名名称不一样,同样使用 ALTER USER,指定目标登录名完成映射

方案三 特殊情况 如果数据库用户确实无用

确认这个数据库用户不需要保留权限,才可以 DROP USER 删除,之后再重新 CREATE USER 关联登录名,这个方案谨慎使用,删除之后原有角色成员 权限全部丢失

四 不同版本注意事项

SQL Server 版本推荐修复方式旧存储过程说明
2008 及更早sp_change_users_login Auto_Fix可以使用,但是后续版本标记弃用
2012 及以上ALTER USER WITH LOGIN优先使用,官方推荐语法
2016 2017 2019 2022ALTER USER WITH LOGINsp_change_users_login 虽然还能运行,不推荐新项目继续使用

五 常见误区

误区 1 遇到 sqlserver 错误 15023 直接删除数据库用户重建,会丢失原有角色和权限配置

误区 2 以为是登录名密码错误,重置密码之后报错依旧存在,因为问题根源是 SID 不匹配

误区 3 认为只要登录名和数据库用户名字一样,SID 就一定相同,SQL Server 登录名 SID 是实例内部独立生成,同名不等于同 SID

误区 4 迁移数据库之后不处理孤立用户,后续业务登录可以连接实例,但是访问这个数据库时报权限异常

六 预防方案

第一 跨实例迁移数据库,优先使用包含备份,也就是备份的时候包含登录名 SID,减少孤立用户

第二 迁移前记录原有登录名 SID,新实例创建登录名的时候指定相同 SID

第三 还原附加数据库之后,第一时间检查孤立用户

第四 不要随意删除重建同名登录名,会直接造成 SID 改变,触发错误 15023

【常见问题】

问题 1 sqlserver 错误 15023 是不是密码错误

回答 1 sqlserver 错误 15023 不是密码错误,这个报错是数据库用户和实例登录名 SID 映射冲突,属于孤立用户问题,就算密码正确,还原迁移数据库之后依然会出现 sqlserver 错误 15023。

问题 2 sqlserver 错误 15023 一定要删除数据库用户吗

回答 2 sqlserver 错误 15023 不需要删除数据库用户,优先使用 ALTER USER 用户名 WITH LOGIN 登录名,直接把现存数据库用户重新绑定登录名,保留原有权限,删除用户会丢失角色权限,属于高风险操作。

问题 3 sqlserver 错误 15023 为什么还原数据库之后才出现

回答 3 sqlserver 错误 15023 大多是备份还原跨实例之后产生,新实例新建的同名登录名 SID 和旧数据库里面用户 SID 不一样,尝试映射的时候数据库已经存在同名用户,就触发 sqlserver 错误 15023。

问题 4 sqlserver 错误 15023 新版 SQL Server 还能用 sp_change_users_login 吗

回答 4 sqlserver 错误 15023 在新版 SQL Server 中 sp_change_users_login 虽然还可以执行,但是官方已经标记弃用,修复 sqlserver 错误 15023 优先推荐 ALTER USER WITH LOGIN 标准语法。

【免责申明】

本文 sqlserver 错误 15023 修复教程仅为技术学习参考,执行 DROP USER 修改数据库用户映射属于数据库权限变更操作,操作前务必备份数据库,生产环境建议在维护窗口执行,本文不承担误操作带来权限丢失 业务中断等相关责任。