c - 当客户端限制为 TLS 1.2 时 SQLDriverConnect 挂起
问题描述
我们有一些遗留代码(C 语言),一个通过 {SQL Server} 驱动程序连接到 SQL Server 数据库的 Windows 服务。使用了多年的客户端最近决定将其服务器上的协议限制在 TLS 1.2 上。现在该服务将无法连接到数据库。
尝试将 {SQL Server} 驱动器更改为 {ODBC Driver 17 for SQL Server},并且对 SQLDriverConnect 的调用无限期挂起。如果有人能提供任何见解,我们将永远感激不尽。
SQLHENV hEnv = NULL;
SQLHDBC hDbc = NULL;
char inString[512];
char outString[512];
SQLSMALLINT outLength;
SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv);
SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0);
SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hDbc);
outLength = 512;
memset(outString, 0, 512);
strcpy(inString, "Driver={ODBC Driver 17 for SQL Server};Server=MYSERVER\\MYINSTANCE;Database=MYDB;UID=sa;PWD=MYPASSWORD");
SQLDriverConnect(hDbc, NULL, inString, (SQLSMALLINT)strlen(inString), outString, 512, &outLength, SQL_DRIVER_NOPROMPT);
SQLDisconnect(hDbc);
SQLFreeHandle(SQL_HANDLE_DBC, hDbc);
SQLFreeHandle(SQL_HANDLE_ENV, hEnv);
解决方案
推荐阅读
- plugins - Checkmarx 通过 CLI 插件团队 ID 扫描错误
- debugging - Nestjs如何在VS代码中编辑代码时进行调试
- c++ - 现代 GCC 将 `<` 前面的模板参数解释为运算符 `<`
- mysql - MySQL 和 MariaDB - 将表示具有许多前导零的十进制值的字符串转换为数值会产生意想不到的结果
- python - python3不能在虚拟环境中工作
- ffmpeg - ffmpeg - 从 MOV 中删除慢动作
- java - 如何使用 GWT 反转列的箭头位置
- bash - 忽略管道内的中间标准错误?
- angular - 如何获取角度组件内的所有图像,包括子组件(以及子组件...)中的图像
- docker - docker-compose + traefik - 将流量定向到 docker-compose 网络之外的服务