常见的 18456 登录错误
- SQL Server 登录错误 18456 是一个通用的身份验证失败错误。为了安全起见,SQL Server 不会向客户端透露失败的具体原因,但可以在服务器端的错误日志中找到详细记录,其中最关键的信息就是这个 State 状态编号,比如下面:
“消息 18456,级别 14,状态 8,服务器 <computer_name>,第 1 行”
“用户 '<user_name>' 登录失败。”
- 每个 18456 错误会返回一个状态编号,每个编号都有它自己的意思。可以根据编号的含义确定错误的原因:
| 状态 | 含义与解释 | 常见原因 |
|---|---|---|
| 2 | 用户 ID 无效(远程连接) | 登录名在 SQL Server 中不存在 |
| 5 | 用户 ID 无效(本地连接) | 登录名在 SQL Server 中不存在 |
| 6 | 身份验证方式错误 | 尝试使用 SQL Server 身份验证 去验证一个 Windows 格式的账户 |
| 7 | 登录已禁用,密码不正确 | 账户处于禁用状态,并且提供的密码也是错误的 |
| 8 | 密码不正确 | 这是最常见的原因 |
| 9 | 密码无效 | 密码不符合 Windows 密码策略要求(如长度、复杂性) |
| 11 | 登录有效,但服务器访问验证失败(基础结构错误) | 身份验证通过了,但在验证授权时失败。常见于 Windows 账户 |
| 12 | 登录有效,但服务器访问验证失败(令牌/授权问题) | 通常也与 Windows 权限或服务账户有关 |
| 18 | 必须更改密码 | 用户账户被标记为“用户在下次登录时必须更改密码” |
| 40 | 未能打开显式指定的数据库 | 用户在连接时指定的数据库不存在或无法访问 |
| 58 | 服务器仅限 Windows 身份验证 | 服务器配置为仅使用 Windows 身份验证,但尝试使用 SQL Server 身份验证登录 |
注:尝试连接包含数据库时,若未在连接字符串中显式指定数据库名也会触发“用户 ID 无效”错误