升级 OpenSSL 后 ODBC 找不到正确的 OpenSSL 版本
ODBC can't find correct OpenSSL version after upgrading OpenSSL
更新:如果你有同样的问题,问题的根源正在讨论here
用自制软件升级到 Python3.10 后,我的 OpenSSL 也升级到版本 3。
现在我无法再连接到我的 SQL 服务器,因为 ODBC 需要 OpenSSL 1.1 或 1.0。所以当我 运行:
isql -v -k "<connection string"
我收到以下错误:
[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]
[08001][Microsoft][ODBC Driver 17 for SQL Server]Client unable to establish connection
但是当我查看 /usr/local/etc/
时,我看到 openssl@1.1
已安装:
我该如何解决这个问题?不是很熟悉这个。所以ODBC需要找到正确的OpenSSL版本,也就是1.1.
我试过了:
ln -s /usr/local/Cellar/openssl@1.1/1.1.1g /usr/local/opt/openssl
另外,当我 运行 openssl
命令时,它找到了正确的版本:
➜ ~ openssl
OpenSSL> version
OpenSSL 1.1.1l 24 Aug 2021
OpenSSL>
输出brew list openssl@1.1
/usr/local/Cellar/openssl@1.1/1.1.1l_1/.bottle/etc/ (7 files)
/usr/local/Cellar/openssl@1.1/1.1.1l_1/bin/c_rehash
/usr/local/Cellar/openssl@1.1/1.1.1l_1/bin/openssl
/usr/local/Cellar/openssl@1.1/1.1.1l_1/include/openssl/ (104 files)
/usr/local/Cellar/openssl@1.1/1.1.1l_1/lib/libcrypto.1.1.dylib
/usr/local/Cellar/openssl@1.1/1.1.1l_1/lib/libssl.1.1.dylib
/usr/local/Cellar/openssl@1.1/1.1.1l_1/lib/engines-1.1/ (2 files)
/usr/local/Cellar/openssl@1.1/1.1.1l_1/lib/pkgconfig/ (3 files)
/usr/local/Cellar/openssl@1.1/1.1.1l_1/lib/ (4 other files)
/usr/local/Cellar/openssl@1.1/1.1.1l_1/share/doc/ (3971 files)
/usr/local/Cellar/openssl@1.1/1.1.1l_1/share/man/ (3971 files)
➜ ~
ls -l /usr/local/opt/openssl/lib/libssl.dylib
的输出
lrwxr-xr-x 1 username admin 14 Sep 7 13:46 /usr/local/opt/openssl/lib/libssl.dylib -> libssl.3.dylib
另外 运行ning DYLD_PRINT_LIBRARIES=1 isql -v -k "<connection string"
给了我以下信息。似乎它仍然链接到 openssl@3
dyld: loaded: /usr/local/opt/openssl/lib/libssl.dylib
dyld: loaded: /usr/local/Cellar/openssl@3/3.0.0/lib/libcrypto.3.dylib
[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]
[08001][Microsoft][ODBC Driver 17 for SQL Server]Client unable to establish connection
[ISQL]ERROR: Could not SQLDriverConnect
您是否尝试过重新安装 msodbcsql17?
旧版本的 msodbcsql17 报告依赖于 OpenSSL 1.1:
$ brew deps -n msodbcsql17
m4
libtool
unixodbc
openssl@1.1
正在重新安装 msodbcsql17...
$ brew reinstall msodbcsql17
==> Downloading https://ghcr.io/v2/homebrew/core/openssl/3/manifests/3.0.0
######################################################################## 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/openssl/3/blobs/sha256:ec819e57038f4ae11e3a3e083ec1d37c174e44fce08830bd
==> Downloading from https://pkg-containers.githubusercontent.com/ghcr1/blobs/sha256:ec819e57038f4ae11e3a3e083ec1d37c174
######################################################################## 100.0%
==> Downloading https://download.microsoft.com/download/1/9/A/19AF548A-6DD3-4B48-88DC-724E9ABCEB9A/msodbcsql17-17.8.1.1-
==> Reinstalling microsoft/mssql-release/msodbcsql17
==> Installing dependencies for microsoft/mssql-release/msodbcsql17: openssl
==> Installing microsoft/mssql-release/msodbcsql17 dependency: openssl
==> Pouring openssl@3--3.0.0.catalina.bottle.tar.gz
==> Regenerating CA certificate bundle from keychain, this may take a while...
/usr/local/Cellar/openssl@3/3.0.0: 6,415 files, 28.2MB
==> Installing microsoft/mssql-release/msodbcsql17
The license terms for this product can be downloaded from
https://aka.ms/odbc17eula and found in
/usr/local/share/doc/msodbcsql17/LICENSE.txt . By entering 'YES',
you indicate that you accept the license terms.
Do you accept the license terms? (Enter YES or NO)
YES
==> odbcinst -u -d -n "ODBC Driver 17 for SQL Server"
==> odbcinst -i -d -f ./odbcinst.ini
/usr/local/Cellar/msodbcsql17/17.8.1.1: 10 files, 2MB, built in 9 seconds
重新安装或升级 msodbcsql17 后,OpenSSL 3 现在被报告为依赖项:
$ brew deps -n msodbcsql17
m4
libtool
unixodbc
openssl@3
在尝试了很多事情之后,我找到了一个(hacky)解决方案:
- 我删除了
/usr/local/opt/
中的 link:
rm openssl
- 创建了一个新的 link 到 openssl@1.1
ln -s /usr/local/Cellar/openssl@1.1/1.1.1l_1 /usr/local/opt/openssl
我不确定你删除了哪个link,因为我把它们都放在下面的link
ls /usr/local/opt:
-openssl
-openssl@1.1
-openssl@3
您是否删除了 /usr/local/opt/openssl ?我们应该用 /usr/local/opt/openssl@1.1 和 /usr/local/opt/openssl@3 做什么?我们应该保留它们吗?
此外,我在 /usr/local/opt/openssl@1.1.
中没有看到 1.1.1l_1
我试过这个:
ln -s /usr/local/Cellar/openssl@1.1/1.1.1l_1 /usr/local/opt/openssl
这是我得到的回应,同样的问题仍然存在:
ln: /usr/local/opt/openssl: 文件存在
谢谢
更新:如果你有同样的问题,问题的根源正在讨论here
用自制软件升级到 Python3.10 后,我的 OpenSSL 也升级到版本 3。
现在我无法再连接到我的 SQL 服务器,因为 ODBC 需要 OpenSSL 1.1 或 1.0。所以当我 运行:
isql -v -k "<connection string"
我收到以下错误:
[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]
[08001][Microsoft][ODBC Driver 17 for SQL Server]Client unable to establish connection
但是当我查看 /usr/local/etc/
时,我看到 openssl@1.1
已安装:
我该如何解决这个问题?不是很熟悉这个。所以ODBC需要找到正确的OpenSSL版本,也就是1.1.
我试过了:
ln -s /usr/local/Cellar/openssl@1.1/1.1.1g /usr/local/opt/openssl
另外,当我 运行 openssl
命令时,它找到了正确的版本:
➜ ~ openssl
OpenSSL> version
OpenSSL 1.1.1l 24 Aug 2021
OpenSSL>
输出brew list openssl@1.1
/usr/local/Cellar/openssl@1.1/1.1.1l_1/.bottle/etc/ (7 files)
/usr/local/Cellar/openssl@1.1/1.1.1l_1/bin/c_rehash
/usr/local/Cellar/openssl@1.1/1.1.1l_1/bin/openssl
/usr/local/Cellar/openssl@1.1/1.1.1l_1/include/openssl/ (104 files)
/usr/local/Cellar/openssl@1.1/1.1.1l_1/lib/libcrypto.1.1.dylib
/usr/local/Cellar/openssl@1.1/1.1.1l_1/lib/libssl.1.1.dylib
/usr/local/Cellar/openssl@1.1/1.1.1l_1/lib/engines-1.1/ (2 files)
/usr/local/Cellar/openssl@1.1/1.1.1l_1/lib/pkgconfig/ (3 files)
/usr/local/Cellar/openssl@1.1/1.1.1l_1/lib/ (4 other files)
/usr/local/Cellar/openssl@1.1/1.1.1l_1/share/doc/ (3971 files)
/usr/local/Cellar/openssl@1.1/1.1.1l_1/share/man/ (3971 files)
➜ ~
ls -l /usr/local/opt/openssl/lib/libssl.dylib
lrwxr-xr-x 1 username admin 14 Sep 7 13:46 /usr/local/opt/openssl/lib/libssl.dylib -> libssl.3.dylib
另外 运行ning DYLD_PRINT_LIBRARIES=1 isql -v -k "<connection string"
给了我以下信息。似乎它仍然链接到 openssl@3
dyld: loaded: /usr/local/opt/openssl/lib/libssl.dylib
dyld: loaded: /usr/local/Cellar/openssl@3/3.0.0/lib/libcrypto.3.dylib
[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]
[08001][Microsoft][ODBC Driver 17 for SQL Server]Client unable to establish connection
[ISQL]ERROR: Could not SQLDriverConnect
您是否尝试过重新安装 msodbcsql17?
旧版本的 msodbcsql17 报告依赖于 OpenSSL 1.1:
$ brew deps -n msodbcsql17
m4
libtool
unixodbc
openssl@1.1
正在重新安装 msodbcsql17...
$ brew reinstall msodbcsql17
==> Downloading https://ghcr.io/v2/homebrew/core/openssl/3/manifests/3.0.0
######################################################################## 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/openssl/3/blobs/sha256:ec819e57038f4ae11e3a3e083ec1d37c174e44fce08830bd
==> Downloading from https://pkg-containers.githubusercontent.com/ghcr1/blobs/sha256:ec819e57038f4ae11e3a3e083ec1d37c174
######################################################################## 100.0%
==> Downloading https://download.microsoft.com/download/1/9/A/19AF548A-6DD3-4B48-88DC-724E9ABCEB9A/msodbcsql17-17.8.1.1-
==> Reinstalling microsoft/mssql-release/msodbcsql17
==> Installing dependencies for microsoft/mssql-release/msodbcsql17: openssl
==> Installing microsoft/mssql-release/msodbcsql17 dependency: openssl
==> Pouring openssl@3--3.0.0.catalina.bottle.tar.gz
==> Regenerating CA certificate bundle from keychain, this may take a while...
/usr/local/Cellar/openssl@3/3.0.0: 6,415 files, 28.2MB
==> Installing microsoft/mssql-release/msodbcsql17
The license terms for this product can be downloaded from
https://aka.ms/odbc17eula and found in
/usr/local/share/doc/msodbcsql17/LICENSE.txt . By entering 'YES',
you indicate that you accept the license terms.
Do you accept the license terms? (Enter YES or NO)
YES
==> odbcinst -u -d -n "ODBC Driver 17 for SQL Server"
==> odbcinst -i -d -f ./odbcinst.ini
/usr/local/Cellar/msodbcsql17/17.8.1.1: 10 files, 2MB, built in 9 seconds
重新安装或升级 msodbcsql17 后,OpenSSL 3 现在被报告为依赖项:
$ brew deps -n msodbcsql17
m4
libtool
unixodbc
openssl@3
在尝试了很多事情之后,我找到了一个(hacky)解决方案:
- 我删除了
/usr/local/opt/
中的 link:
rm openssl
- 创建了一个新的 link 到 openssl@1.1
ln -s /usr/local/Cellar/openssl@1.1/1.1.1l_1 /usr/local/opt/openssl
我不确定你删除了哪个link,因为我把它们都放在下面的link
ls /usr/local/opt: -openssl -openssl@1.1 -openssl@3
您是否删除了 /usr/local/opt/openssl ?我们应该用 /usr/local/opt/openssl@1.1 和 /usr/local/opt/openssl@3 做什么?我们应该保留它们吗?
此外,我在 /usr/local/opt/openssl@1.1.
中没有看到 1.1.1l_1我试过这个: ln -s /usr/local/Cellar/openssl@1.1/1.1.1l_1 /usr/local/opt/openssl 这是我得到的回应,同样的问题仍然存在: ln: /usr/local/opt/openssl: 文件存在
谢谢