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" 解决了我的问题。
我正在为我的项目使用 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" 解决了我的问题。