Windows 身份验证不适用于 SQL Server

Posted

技术标签:

【中文标题】Windows 身份验证不适用于 SQL Server【英文标题】:Windows Authentication not working with SQL Server 【发布时间】:2013-11-06 19:35:06 【问题描述】:

我正在尝试使用 Windows 身份验证设置 SQL Server 登录名和用户。

到目前为止我所做的如下:

    向我的 PC 添加了一个名为“User1”的新非管理员帐户。 PC 被称为“DESKTOP”,所以完整的用户名是“DESKTOP\User1”

    使用“FROM WINDOWS”选项为该用户创建了一个 SQL Server 登录,以将 SQL 登录链接到我的 PC 登录。用户被称为例如“桌面\用户 1。”

    使用“FOR LOGIN”选项为 SQL Server 登录创建数据库级用户,以将用户链接到 SQL Server 登录。

    已验证新数据库用户不是“SysAdmins”组的成员,并且已启用登录并允许登录访问。

    退出我的管理员 Windows 帐户并以“User1”身份登录。我成功登录了。

    启动 SSMS,确保用户名设置为“DESKTOP\User1”并且选择了“Windows 身份验证”。

当我按下“连接”时,我收到了一个错误,事件日志中的内容如下:

Token based server access validation failed with an infrastructure error
Server Name: DESKTOP
Error Number: 18456
Severity: 14
State: 1
Line Number: 65536

阅读此内容后,有人认为这是 UAC 错误。所以我以管理员身份运行 SSMS。在 Windows 8.1 上,它会要求我使用系统管理员帐户登录 - 这很有效 - 但随后我以“DESKTOP\Administrator”而不是“DESKTOP\User1”身份登录到 SQL Server。

为什么 Windows 不能将我的非管理员凭据传递给 SQL Server 并让我登录?这样做的目的是(在未来的“域”中)用户可以使用非管理员权限并使用 Windows 身份验证访问 SQL Server。

提前致谢。

【问题讨论】:

【参考方案1】:

问题是 BUILTIN\Users 组的登录权限被禁用。

这必须覆盖各个用户帐户。 DESKTOP\User1 必须是该组的一部分,并且组级权限会覆盖它。

【讨论】:

【参考方案2】:

我假设您的 SQL Server 事件日志中有以下消息:

Login failed for users ‘DESKTOP\User1’. Reason: Token-based server access validation failed with an infrastructure error. Check for previous errors. [CLIENT: xxx.xxx.xxx.xxx]
Error: 18456, Severity: 14, State: 12

状态 12 表示 SQL Server 能够对您进行身份验证,但无法使用底层 Windows 权限进行验证。

尝试以管理员身份登录服务器并运行以下命令:

GRANT CONNECT SQL TO [DESKTOP\User1];
GRANT CONNECT ON ENDPOINT::"TSQL Default TCP" TO [DESKTOP\User1];

【讨论】:

我已经用更详细的错误信息更新了这个问题。此错误的状态为 1。不过还是谢谢。 检查 SQL Server 中的 SERVER 事件日志。客户端错误始终显示状态 1。 从中获得了更多有用的信息:错误 18456,严重性 14,状态 11。

以上是关于Windows 身份验证不适用于 SQL Server的主要内容,如果未能解决你的问题,请参考以下文章

为啥 cURL 不适用于 IIS7 上的 Windows 身份验证?

System.Net.WebClient 不适用于 Windows 身份验证

Windows 身份验证不适用于 HttpClient [重复]

通过 Angular 调用时,Windows 身份验证不适用于 WebAPI

webDAV IIS6 身份验证不适用于匿名禁用

JTDS 与 SQL Server 的连接问题 - 适用于 2000 但不适用于 2005