MSSQL 2017安装在一台SUSE12 SP2 pc上,然后在应用程序pc上安装unixODBC驱动程序,尝试让应用程序在SUSE Linux下与MSSQL 2017对话,但是ODBC api在连接期间报告错误。到目前为止,我做到了 安装msodbcsql17
# sudo zypper install msodbcsql17
check configure
# odbcinst -j
unixODBC 2.3.7
DRIVERS............: /etc/unixODBC/odbcinst.ini
SYSTEM DATA SOURCES: /etc/unixODBC/odbc.ini
FILE DATA SOURCES..: /etc/unixODBC/ODBCDataSources
USER DATA SOURCES..: /users/nvh1wa/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
检查odbcinst.ini
#cat /etc/unixODBC/odbcinst.ini
`[ODBC Driver 17 for SQL Server]
Description=Microsoft ODBC Driver 17 for SQL Server
Driver=/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.3.so.1.1
UsageCount=1`
检查odbc.ini和odbc.ini是否为空
这是我们与MSSQL服务器连接的代码
`if(!SQL_SUCCEEDED(SQLDriverConnect(handle, NULL, (SQLTCHAR*)
connect_string.c_str(), SQL_NTS, ConnStrOut, 1024, &cbConnStrOut,
SQL_DRIVER_NOPROMPT)))){ report error here;}`
哪个报告失败。
这是系统日志中的错误:
ODBC error. SQLSTATE: 08001 Native error: -1
Message: [Microsoft][ODBC Driver 17 for SQL Server]SSL Provider: [error:140A90A1:SSL routines:func(169):reason(161)]
Approx SQL was "CONNECT"
我们的connect_string看起来像这样
"DRIVER=ODBC Driver 17 for SQL Server;DATABASE=master;SERVER=127.0.0.28;UID=testing;PWD=testing"
从错误消息中,ODBC驱动程序报告SSL错误?但是我的MSSQL服务器从未设置启用SSL。并且我的sqlcmd可以毫无问题地与我的MSSQL连接。
进行了一些进一步的研究,并从MSSQL odbc驱动程序中查找SSL错误。这是我通过检查SSL错误找到的内容
/usr/bin/openssl errstr 0x140A90A1
error:140A90A1:SSL routines:SSL_CTX_new:library has no ciphers