-
Notifications
You must be signed in to change notification settings - Fork 30
Labels
bugSomething isn't workingSomething isn't workingcommunityPR or Issue raised by community membersPR or Issue raised by community membersinADOtriage doneIssues that are triaged by dev team and are in investigation.Issues that are triaged by dev team and are in investigation.
Description
Describe the bug
Login fails when authenticating with username and password when the password contains a curly brace.
Traceback (most recent call last):
File "/tmp/ipykernel_54945/515371336.py", line 4, in <module>
mssql_python.connect(client.connection_string)
File "/home/ec2-user/.pyenv/versions/3.12.8/envs/dev/lib/python3.12/site-packages/mssql_python/db_connection.py", line 46, in connect
conn = Connection(
^^^^^^^^^^^
File "/home/ec2-user/.pyenv/versions/3.12.8/envs/dev/lib/python3.12/site-packages/mssql_python/connection.py", line 243, in __init__
self._conn = ddbc_bindings.Connection(
^^^^^^^^^^^^^^^^^^^^^^^^^
RuntimeError: [Microsoft][ODBC Driver 18 for SQL Server][SQL Server]Login failed for user '<username>'.
logs
DEBUG, logging.py:374, Python, sanitize_connection_string: Sanitizing connection string (length=180)
DEBUG, logging.py:374, Python, sanitize_connection_string: Password fields masked
INFO, logging.py:374, Python, Final connection string: Driver={ODBC Driver 18 for SQL Server};APP=MSSQL-Python;Database=<dbname>;PWD=***;Server=<ipaddress>;TrustServerCertificate=yes;UID=<username>
DEBUG, logging.py:374, Python, PoolingManager.enable: Attempting to enable pooling - max_size=100, idle_timeout=600
INFO, logging.py:374, Python, PoolingManager.enable: Enabling connection pooling - max_size=100, idle_timeout=600 seconds
INFO, logging.py:374, Python, PoolingManager.enable: Connection pooling enabled successfully
DEBUG, connection_pool.cpp:122, DDBC, Creating new connection pool
DEBUG, connection.cpp:22, DDBC, Allocating ODBC environment handle
DEBUG, connection.cpp:63, DDBC, Allocating SQL Connection Handle
DEBUG, connection.cpp:72, DDBC, Connecting to database
DEBUG, connection.cpp:83, DDBC, Creating connection string buffer for macOS/Linux
DEBUG, connection.cpp:86, DDBC, Connection string buffer size=181
DEBUG, connection.cpp:88, DDBC, Connection string buffer created
DEBUG, ddbc_bindings.cpp:1312, DDBC, SQLCheckError: Checking ODBC errors - handleType=2, retcode=-1
DEBUG, connection.cpp:102, DDBC, Disconnecting from database
ERROR, logging.py:374, Python, Error closing database connection: 'Connection' object has no attribute '_conn'
WARNING, logging.py:374, Python, Error during connection cleanup: 'Connection' object has no attribute '_conn'
To reproduce
import mssql_python
import traceback
server = "<ipaddress>"
user = "<username>"
password = "aaaaaaaa{aaaaaaaa"
connection_string = f'SERVER={server};UID={user};PWD={password};TrustServerCertificate=yes'
try:
mssql_python.connect(connection_string)
except Exception:
print(traceback.format_exc())
raiseExpected behavior
Login should work with the given password.
Further technical details
Python version: 3.12.8
SQL Server version: Microsoft SQL Server 2019
Operating system: Amazon Linux 2023
Additional context
I tinkered around with the code and managed find out that there is something wrong with processes relating to the escaping/unescaping of the curly brace. The library encodes the password in the connection string:
PWD=aaaaaaaa{aaaaaaaa;
becomes
PWD={aaaaaaaa{{aaaaaaaa};
AFAIK this is correct, but if I update the code to remove the extra curly brace so that authentincation is made with PWD={aaaaaaaa{aaaaaaaa};, the login completes successfully.
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't workingcommunityPR or Issue raised by community membersPR or Issue raised by community membersinADOtriage doneIssues that are triaged by dev team and are in investigation.Issues that are triaged by dev team and are in investigation.