当传递空用户名/密码时,Windows身份验证默认使用SQL Server

时间:2016-11-22 05:12:11

标签: sql-server windows-authentication

我正在为我的项目实现SQL Server的Windows身份验证功能,并遇到了这个奇怪的问题。

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

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

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

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

用于连接SQL Server的API是:

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

此API的预期行为是什么?如果是这样,是否有任何链接可以获取此信息?

提前致谢。

1 个答案:

答案 0 :(得分:0)

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

因此使用" ODBC驱动程序11用于SQL Server"解决了我的问题。