连接器和 API 手册  / 第 5 章 MySQL 连接器/ODBC 开发人员指南  / 5.8 连接器/ODBC 注释和提示  /  5.8.3 连接器/ODBC 和应用程序都使用 OpenSSL

5.8.3 连接器/ODBC 和应用程序都使用 OpenSSL

如果连接器/ODBC 与 MySQL 服务器安全连接,并且使用该连接的应用程序自行调用 OpenSSL 库,则该应用程序可能会失败,因为 OpenSSL 库的两个副本将被使用。

笔记

Connector/ODBC 8.0 及更高版本动态链接到 OpenSSL,而早期的 Connector/ODBC 版本静态链接到 OpenSSL。这解决了与使用来自同一应用程序的两个 OpenSSL 副本相关的问题。

笔记

TLSv1.0 和 TLSv1.1 连接协议在连接器/ODBC 8.0.26 中已弃用,并在版本 8.0.28 中删除。

笔记

另请参阅 tls-versions 连接选项。

为防止出现此问题,在您的应用程序中,不允许同时在一个线程中初始化 OpenSSL 和在另一个线程中打开连接器/ODBC 连接(这也会初始化 openSSL)。例如,使用互斥锁来确保SQLDriverConnect()or SQLConnect()调用和 openSSL 初始化之间的同步。除此之外,如果可能,请执行以下操作:

  • 使用连接器/ODBC 的构建(静态或动态)链接到 libmysqlclient库的某个版本,该版本又动态链接到应用程序调用的同一 OpenSSL 库。

  • 当创建链接(静态或动态)到 libmysqlclient静态链接到 OpenSSL 库的库版本的连接器/ODBC 构建时,请勿在构建中导出 OpenSSL 符号。这可以防止不正确地解析应用程序符号;但是,这并不能避免在单个应用程序中运行两个 OpenSSL 代码副本所带来的其他问题。