Windows 身份验证默认与 SQL 服务器一起工作,当传递空 username/password 时

Windows authentication works by default with SQL Server, when empty username/password are passed

我正在为我的项目使用 SQL 服务器实施 Windows 身份验证功能,但遇到了这个奇怪的问题。

在连接字符串中,我添加了一个新参数 Trusted_Connection 如果我们必须启用 Windows 身份验证功能,我将其设置为 yes 否则将其显式设置no。即使它默认应该是 no.

在我尝试在连接字符串中传递一个空的用户名和密码之前,该功能工作正常:

Driver={SQL Server};Server=localhost;Database=test;UID=;PWD=;Trusted_Connection=no

奇怪的是,这与数据库建立了连接,而且似乎使用了 Windows 用户身份验证。由 运行 其他一些没有所需权限的用户测试,但失败了。

用于连接到 SQL 服务器的 API 是:

SQLDriverConnect(
    hDbc,
    NULL,
    ConnStr,
    SQL_NTS,
    NULL,
    0,
    NULL,
    SQL_DRIVER_COMPLETE
);

这是 API 的预期行为吗?如果是这样,有没有 link 我可以从哪里获得此信息?

提前致谢。

Windows 随附的 "SQL Server" ODBC 驱动程序是旧版驱动程序,仅为了向后兼容而提供。它会将空 UID 解释为 Windows 身份验证请求,而不管 Trusted_Connection 规范如何。现代驱动程序(SQL Server Native Client 和 SQL Server 的 ODBC Driver n)遵循 Trusted_Connection 规范。

因此使用 "ODBC Driver 11 for SQL Server" 解决了我的问题。