SQLCMD 命令有效,但 ODBC 无效

SQLCMD 命令有效,但 ODBC 无效

我正尝试从 Linux 机器连接到 MS SQL 服务器,但无法使 ODBC 工作。

以下命令有效并且我得到了一个 shell:

sqlcmd -S tcp:<servername>,<dynamic port> -U <SQL username> -P <SQL user password>

我的 ODBC.ini 文件中有以下内容

[example]
Driver = ODBC Driver 17 for SQL Server 
Server = <servername>
Port = <dynamic port>
User = <SQL username>
Password = <SQL user password>

据我理解,此命令应产生与之前相同的结果:

sqlcmd -D -S example

但我收到以下错误

Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Login timeout expired.
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : TCP Provider: Error code 0x2749.
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online..

附加信息:

[user@server ~]$ odbcinst -j
unixODBC 2.3.7
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /home/ictadmin/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8

[user@server ~]$ cat /etc/odbcinst.ini
[ODBC Driver 17 for SQL Server]
Description=Microsoft ODBC Driver 17 for SQL Server
Driver=/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.10.so.1.1
UsageCount=1

答案1

Port对于 Microsoft 的 Linux ODBC 驱动程序来说,不是 Linux 上 odbc.ini 中的有效关键字。

您需要Server = <hostname>,<port>在 ODBC.ini 中指定。如果您使用动态端口,请保留该端口。

答案2

我通过禁用 SELinux 让它工作

setenforce 0

并使用以下 ODBC.ini

[example]
Driver = ODBC Driver 17 for SQL Server 
Server = tcp:<servername>,<port>

这是在 AlmaLinuxOS 9 (5.14.0-70.17.1.el9_0.x86_64) 上

相关内容