ClickHouse / ClickHouse/odbc-bridge

<Error> ODBCColumnsInfoHandler: std::exception. Code: 1001, type: nanodbc::database_error, e.what() = contrib/nanodbc/nanodbc/nanodbc.cpp:1046: 4200: [FreeTDS][SQL Server]Login failed for user 'username'

Open
#4 2 comments 0 reactions 0 assignees View on GitHub
Dominant language
C++
Stars
4
Forks
4
PR merge metrics
No merged PRs in 30d

Description

### Describe the bug
Error during an ODBC call. I have setup an ODBC docker container on port 9018. And the Clickhouse database server is also a docker container which can reach this ODBC container.
P.S. My password and username contains special characters. So based on the comments on [https://stackoverflow.com/questions/55150362/maybe-illegal-character-in-odbc-sql-server-connection-string-pwd](url) I enclosed the Username and Password with 2 opening curly braces and 3 closing braces.

### Steps to reproduce
1. Login to Clickhouse client (remote)
2. On the client, select * from odbc('DSN=***;port=1433;Uid=***;Pwd=***;Database=testdb', 'dbo', 'test_table');
3. On the ODBC server, clickhouse-odbc-bridge --listen-host=0.0.0.0 --http-port 9018 --log-level=debug

### Expected behaviour
Query should show the data.

### Error log

1. Error when I do NOT enclose the Username and Password in Curly Braces
```
2025.04.28 15:20:50.805233 [ 24 ] {} ODBCColumnsInfoHandler: Error getting columns from ODBC 'Code: 404. DB::Exception: ODBC connection string parameter value is unescaped and contains illegal character. (BAD_ODBC_CONNECTION_STRING) (version 24.12.5.81 (official build))'
2025.04.28 15:20:50.808032 [ 24 ] {} ODBCColumnsInfoHandler: Code: 404. DB::Exception: ODBC connection string parameter value is unescaped and contains illegal character. (BAD_ODBC_CONNECTION_STRING), Stack trace (when copying this message, always include the lines below):

0. ./build_docker/./src/Common/Exception.cpp:107: DB::Exception::Exception(DB::Exception::MessageMasked&&, int, bool) @ 0x0000000008586f5b
1. ./src/Common/Exception.h:105: DB::Exception::Exception(PreformattedMessage&&, int) @ 0x000000000408dc2c
2. ./src/Common/Exception.h:123: DB::Exception::Exception<>(int, FormatStringHelperImpl<>) @ 0x0000000004089e6b
3. ./build_docker/./programs/odbc-bridge/validateODBCConnectionString.cpp:87: DB::validateODBCConnectionString(String const&) @ 0x00000000040aa816
4. ./build_docker/./programs/odbc-bridge/ColumnInfoHandler.cpp:137: DB::ODBCColumnsInfoHandler::handleRequest(DB::HTTPServerRequest&, DB::HTTPServerResponse&, StrongTypedef const&) @ 0x0000000004086a7d
5. ./build_docker/./src/Server/HTTP/HTTPServerConnection.cpp:71: DB::HTTPServerConnection::run() @ 0x000000000655d810
6. ./build_docker/./base/poco/Net/src/TCPServerConnection.cpp:40: Poco::Net::TCPServerConnection::start() @ 0x000000000874d727
7. ./build_docker/./base/poco/Net/src/TCPServerDispatcher.cpp:115: Poco::Net::TCPServerDispatcher::run() @ 0x000000000874dbb9
8. ./build_docker/./base/poco/Foundation/src/ThreadPool.cpp:205: Poco::PooledThread::run() @ 0x000000000871c1fc
9. ./base/poco/Foundation/src/Thread_POSIX.cpp:335: Poco::ThreadImpl::runnableEntry(void*) @ 0x000000000871a9bd
10. ? @ 0x0000790d5b260ac3
11. ? @ 0x0000790d5b2f1a04
(version 24.12.5.81 (official build))
```

2. Error when I enclose the Username and Password in Curly Braces
```
2025.04.28 15:16:42.478852 [ 24 ] {} ODBCColumnsInfoHandler: Error getting columns from ODBC 'std::exception. Code: 1001, type: nanodbc::database_error, e.what() = contrib/nanodbc/nanodbc/nanodbc.cpp:1046: 4200: [FreeTDS][SQL Server]Login failed for user 'username'. (version 24.12.5.81 (official build))'
2025.04.28 15:16:42.478892 [ 24 ] {} ODBCColumnsInfoHandler: std::exception. Code: 1001, type: nanodbc::database_error, e.what() = contrib/nanodbc/nanodbc/nanodbc.cpp:1046: 4200: [FreeTDS][SQL Server]Login failed for user 'username'. , Stack trace (when copying this message, always include the lines below):

0. ./build_docker/./contrib/nanodbc/nanodbc/nanodbc.cpp:483: nanodbc::database_error::database_error(void*, short, String const&) @ 0x000000000678198b
1. ./build_docker/./contrib/nanodbc/nanodbc/nanodbc.cpp:1046: nanodbc::connection::connection_impl::connect(String const&, long, void*) @ 0x0000000006783379
2. ./build_docker/./contrib/nanodbc/nanodbc/nanodbc.cpp:871: nanodbc::connection::connection_impl::connection_impl(String const&, long) @ 0x000000000678314b
3. ./contrib/nanodbc/nanodbc/nanodbc.cpp:3742: DB::ODBCPooledConnectionFactory::get(String const&, unsigned long) @ 0x0000000004088e1e
4. ./build_docker/./programs/odbc-bridge/ColumnInfoHandler.cpp:136: DB::ODBCColumnsInfoHandler::handleRequest(DB::HTTPServerRequest&, DB::HTTPServerResponse&, StrongTypedef const&) @ 0x0000000004086abb
5. ./build_docker/./src/Server/HTTP/HTTPServerConnection.cpp:71: DB::HTTPServerConnection::run() @ 0x000000000655d810
6. ./build_docker/./base/poco/Net/src/TCPServerConnection.cpp:40: Poco::Net::TCPServerConnection::start() @ 0x000000000874d727
7. ./build_docker/./base/poco/Net/src/TCPServerDispatcher.cpp:115: Poco::Net::TCPServerDispatcher::run() @ 0x000000000874dbb9
8. ./build_docker/./base/poco/Foundation/src/ThreadPool.cpp:205: Poco::PooledThread::run() @ 0x000000000871c1fc
9. ./base/poco/Foundation/src/Thread_POSIX.cpp:335: Poco::ThreadImpl::runnableEntry(void*) @ 0x000000000871a9bd
10. ? @ 0x0000790d5b260ac3
11. ? @ 0x0000790d5b2f1a04
(version 24.12.5.81 (official build))
```

### Query log
select * from system.query_log;
Output:
Type: ExceptionBeforeStart
Query Duration: ~9000 ms
Exception:
Code: 86. DB::HTTPException: Received error from remote server http://odbc-bridge:9018/columns_info?use_connection_pooling=1&version=1&connection_string=DSN%3D***%3Bport%3D1433%3BUid%3D***%07***%3BPwd%3D*****%3BDatabase%3Dtestdb&schema=dbo&table=test_table&external_table_functions_use_nulls=1. HTTP status code: 500 'Internal Server Error', body length: 211 bytes, body: 'Error getting columns from ODBC 'Code: 404. DB::Exception: ODBC connection string parameter value is unescaped and contains illegal character. (BAD_ODBC_CONNECTION_STRING) (version 24.12.5.81 (official build))'
'. (RECEIVED_ERROR_FROM_REMOTE_IO_SERVER) (version 25.3.2.39 (official build))

### Configuration
#### Environment
* Driver version: Clickhouse Driver Bridge 24.12.5.81
* OS: Ubuntu 22.04
* ODBC Driver manager:

#### ClickHouse server
* ClickHouse Server version: 25.3.2.39

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.