macOS: encrypted connections fail after Homebrew moved the `openssl` alias to `openssl@4`
Maintainer antworten meist innerhalb von 2 Tagen
@bewithgaurav arbeitet bereits daran.
Seit 30.9.2026.
Bewertung
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Anfängerfreundlichkeit
- 55/100
Rechercherichtung
Start with the README installation instructions and the bundled mssql_python_odbc/libs/macos/arm64/lib/libmsodbcsql.18.dylib, then reproduce both Homebrew OpenSSL 3 and OpenSSL 4 cases on Apple silicon. Done means encrypted connections work with the supported OpenSSL setup and the README no longer directs users to a failing installation.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Describe the bug
On macOS with Homebrew, every encrypted connection fails because the bundled ODBC driver cannot load OpenSSL. The cause is Homebrew/homebrew-core#313581, which moved the openssl alias from openssl@3 to openssl@4 on 2026-09-27.
The bundled libmsodbcsql.18.dylib loads OpenSSL only from these two paths:
/opt/homebrew/opt/openssl/lib/
/usr/local/opt/openssl/lib/
In each path, it tries libssl.1.1.dylib and the unversioned libssl.dylib (from strings .../mssql_python_odbc/libs/macos/arm64/lib/libmsodbcsql.18.dylib).
On 2026-09-27, Homebrew moved the openssl alias from openssl@3 to openssl@4 in Homebrew/homebrew-core#313581. The migration is tracked in Homebrew/homebrew-core#278366. Now /opt/homebrew/opt/openssl belongs to openssl@4. When only openssl@3 is installed, brew upgrade removes the link, and the driver finds no OpenSSL.
When openssl@4 is installed, libssl.dylib in that path is OpenSSL 4. The driver loads libssl.4.dylib from the openssl@4 4.0.2_1 bottle, then refuses it with the same error. So the README install step brew install openssl now gives a setup that cannot connect.
Exception message:
mssql_python.exceptions.OperationalError: Driver Error: Client unable to establish connection; DDBC Error: [Microsoft]SSL Provider: [OpenSSL library could not be loaded, make sure OpenSSL 1.0, 1.1, or 3.0 is installed]
Stack trace:
.venv/lib/python3.14/site-packages/mssql_python/db_connection.py:89: in connect
conn = Connection(
.venv/lib/python3.14/site-packages/mssql_python/connection.py:753: in __init__
_raise_connection_error(e)
.venv/lib/python3.14/site-packages/mssql_python/connection.py:125: in _raise_connection_error
raise exc from None
To reproduce
Case A, only OpenSSL 3:
- On Apple silicon, install
openssl@3with Homebrew, and do not installopenssl@4. - Confirm that
/opt/homebrew/opt/openssldoes not exist. - Run the code below.
Case B, OpenSSL 4:
- Run
brew install openssl, as the README says. This installsopenssl@4. - Run the code below.
DYLD_PRINT_LIBRARIES=1showslibssl.4.dylibload before the error.
from mssql_python import connect
connect("Server=tcp:<server>.database.windows.net,1433;Database=<database>;Encrypt=yes;Authentication=ActiveDirectoryDefault")
Workaround: ln -s openssl@3 /opt/homebrew/opt/openssl. After that, the connection succeeds.
Expected behavior
The driver connects with the OpenSSL that Homebrew's openssl installs now, which is OpenSSL 4. If the driver cannot support OpenSSL 4, it finds OpenSSL 3 from openssl@3, for example at /opt/homebrew/opt/openssl@3/lib/, and the README names openssl@3.
Further technical details
Python version: 3.14.7
SQL Server version: Azure SQL Database (serverless)
Operating system: macOS 27.0, arm64
mssql-python: 1.15.0
mssql-python-odbc: 18.6.2.1
Homebrew: 7.0.7, openssl@3 3.6.4_1
Additional context
A later install of openssl@4, for example as a dependency of another formula, takes the openssl link back. Then the driver loads OpenSSL 4 and fails as in case B.
- Vorherrschende Sprache
- Python
- Sterne
- 478
- Forks
- 62
- Ø Merge
- 3 T. 19 Min.
- Gemergte PRs (30 T.)
- 28
Entwicklungsumgebung
Startet den Dev-Container des Projekts im Browser, mit Ihrem eigenen GitHub-Konto.
- Kein Dockerfile und keine Docker-Compose-Datei
- Hat eine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus microsoft/mssql-python
-
area: bulk-copy triage needed
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 70/100
microsoft/mssql-python#843 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 2 Tagen
-
triage needed
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 35/100
microsoft/mssql-python#846 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 2 Tagen
-
Announcement: mssql-python is coming to Django through mssql-django 2.0Evtl. wieder frei @bewithgaurav hat das vor 43 Tagen übernommen, und es ist kein Pull Request offen. Offenannouncement
microsoft/mssql-python#748 · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 2 Tagen
-
Connection pool can briefly exceed max_size when pooling is disabled under loadEvtl. vergeben @bewithgaurav hat das vor 25 Tagen übernommen. Offenarea: connectivity-auth bug triage done under development
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 62/100
microsoft/mssql-python#746 · 1 Kommentar · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 2 Tagen
-
Decimal in money range still string-binds on the executemany pathEvtl. vergeben @bewithgaurav hat das vor 25 Tagen übernommen. Offenarea: data-types bug triage done under development
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 48/100
microsoft/mssql-python#745 · 1 Kommentar · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 2 Tagen
Alle Issues in microsoft/mssql-python
Ähnliche Issues
-
python triage
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
microsoft/semantic-kernel#14615 ·
Maintainer antworten meist innerhalb von 3 Tagen
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 65/100
-
bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 74/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
shackett/shackett-utils#19 ·
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
UKGovernmentBEIS/control-arena#917 ·
Maintainer antworten meist innerhalb von 1 Tag