升级 OpenSSL 后 ODBC 找不到正确的 OpenSSL 版本

Erf*_*fan 8 sql-server odbc openssl

更新:如果您遇到同样的问题,这里正在讨论问题的根源

\n
\n

使用自制软件升级到Python3.10后,我的OpenSSL也升级到版本3。

\n

现在我无法再连接到 SQL Server,因为 ODBC 需要 OpenSSL 1.1 或 1.0。所以当我跑步时:

\n
isql -v -k "<connection string"\n
Run Code Online (Sandbox Code Playgroud)\n

我收到以下错误:

\n
[08001][Microsoft][ODBC Driver 17 for SQL Server]SSL Provider: [OpenSSL library could not be loaded, make sure OpenSSL 1.0 or 1.1 is installed]\n[08001][Microsoft][ODBC Driver 17 for SQL Server]Client unable to establish connection\n
Run Code Online (Sandbox Code Playgroud)\n

但是当我查看时,/usr/local/etc/我发现它openssl@1.1已安装:

\n

openssl 版本

\n

我怎么解决这个问题?对这个还真不熟悉。所以ODBC需要找到正确的OpenSSL版本,即1.1。

\n

我试过:

\n
ln -s /usr/local/Cellar/openssl@1.1/1.1.1g /usr/local/opt/openssl\n
Run Code Online (Sandbox Code Playgroud)\n

另外,当我运行openssl命令时,它会找到正确的版本:

\n
\xe2\x9e\x9c  ~ openssl\nOpenSSL> version\nOpenSSL 1.1.1l  24 Aug 2021\nOpenSSL> \n
Run Code Online (Sandbox Code Playgroud)\n
\n

输出brew list openssl@1.1

\n
/usr/local/Cellar/openssl@1.1/1.1.1l_1/.bottle/etc/ (7 files)\n/usr/local/Cellar/openssl@1.1/1.1.1l_1/bin/c_rehash\n/usr/local/Cellar/openssl@1.1/1.1.1l_1/bin/openssl\n/usr/local/Cellar/openssl@1.1/1.1.1l_1/include/openssl/ (104 files)\n/usr/local/Cellar/openssl@1.1/1.1.1l_1/lib/libcrypto.1.1.dylib\n/usr/local/Cellar/openssl@1.1/1.1.1l_1/lib/libssl.1.1.dylib\n/usr/local/Cellar/openssl@1.1/1.1.1l_1/lib/engines-1.1/ (2 files)\n/usr/local/Cellar/openssl@1.1/1.1.1l_1/lib/pkgconfig/ (3 files)\n/usr/local/Cellar/openssl@1.1/1.1.1l_1/lib/ (4 other files)\n/usr/local/Cellar/openssl@1.1/1.1.1l_1/share/doc/ (3971 files)\n/usr/local/Cellar/openssl@1.1/1.1.1l_1/share/man/ (3971 files)\n\xe2\x9e\x9c  ~ \n
Run Code Online (Sandbox Code Playgroud)\n

输出ls -l /usr/local/opt/openssl/lib/libssl.dylib

\n
lrwxr-xr-x  1 username  admin  14 Sep  7 13:46 /usr/local/opt/openssl/lib/libssl.dylib -> libssl.3.dylib\n
Run Code Online (Sandbox Code Playgroud)\n

跑步DYLD_PRINT_LIBRARIES=1 isql -v -k "<connection string"还给了我以下内容。似乎仍然链接到openssl@3

\n
dyld: loaded:  /usr/local/opt/openssl/lib/libssl.dylib\ndyld: loaded: /usr/local/Cellar/openssl@3/3.0.0/lib/libcrypto.3.dylib\n[08001][Microsoft][ODBC Driver 17 for SQL Server]SSL Provider: [OpenSSL library could not be loaded, make sure OpenSSL 1.0 or 1.1 is installed]\n[08001][Microsoft][ODBC Driver 17 for SQL Server]Client unable to establish connection\n[ISQL]ERROR: Could not SQLDriverConnect\n
Run Code Online (Sandbox Code Playgroud)\n

Erf*_*fan 15

经过尝试很多事情后,我找到了一个(hacky)解决方案:

  1. 我删除了以下链接/usr/local/opt/
rm openssl
Run Code Online (Sandbox Code Playgroud)
  1. 创建了一个到 openssl@1.1 的新链接
ln -s /usr/local/Cellar/openssl@1.1/1.1.1l_1 /usr/local/opt/openssl
Run Code Online (Sandbox Code Playgroud)