0

我可以通过以下方式从我的 Ubuntu 20.04 VM 连接到我的 Azure SQL 数据库:

TDSVER=7.3 tsql -H mysubdomain.database.windows.net -U un -P pw -p 1433

我想用 freetds.conf 让它工作,但它失败了,我不知道为什么;这就是我正在尝试的:

tsql -S db_from_conf -U un -P pw

使用 freetds.conf 包含:

[db_from_conf]
    host = mysubdomain.database.windows.net
    port = 1433
    tds version = 7.3

第二次调用失败:

Msg 40532 (severity 20, state 1) from db_from_conf:
    "Cannot open server "db_from_conf" requested by the login.  The login failed."
Error 20002 (severity 9):
    Adaptive Server connection failed
There was a problem connecting to the server

以下是“tsql -C”的结果:

Compile-time settings (established with the "configure" script)
                        Version: freetds v1.1.6
         freetds.conf directory: /etc/freetds
 MS db-lib source compatibility: no
    Sybase binary compatibility: yes
                  Thread safety: yes
                  iconv library: yes
                    TDS version: auto
                          iODBC: no
                       unixodbc: yes
          SSPI "trusted" logins: no
                       Kerberos: yes
                        OpenSSL: no
                         GnuTLS: yes
                           MARS: yes

这些有什么不同,我怎样才能让它工作?

4

1 回答 1

0

尝试将 freetds.conf 在配置文件中识别的 TDS 版本设置为 7.1 或 8.0。在一些用户中,问题是 freetds.conf 识别的 TDS 版本在较新的版本中发生了变化。请查看 2021 年 6 月 4 日发布的 FreeTDS 版本 1.3。

注意:如果您的连接字符串使用“SERVERNAME=”,则使用相应 freetds.conf 服务器中的设置。如果您的连接字符串使用“SERVER=”,那么 freetds.conf 和 odbc.ini 都会被忽略。

记住,您的 freetds.conf 看起来不错,ServerName 是您在 /etc/freetds/freetds.conf 中定义的名称,并且 TDS_Version 应该与您在 /etc/freetds/freetds.conf 中定义的名称相匹配

示例命令:

 tsql -S 'DNS name' -U devuser 

或者

 isql -v DNS Name User 'Password'

首先安装以下软件包:

sudo apt-get install unixodbc unixodbc-dev freetds-dev tdsodbc

并按如下方式配置freetds:

--- /etc/freetds/freetds.conf ---
[TS]
host = SERVER
port = 1433
tds version = 7.0
client charset = UTF-8

如果需要 odbc 连接,可以配置 odbcinst.ini 如下:

--- /etc/odbcinst.ini ---
[FreeTDS]
Description = FreeTDS
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
FileUsage = 1
CPTimeout =
CPResuse  =
client charset = utf-8

和 odbc.ini 如下:

--- /etc/odbc.ini ---
[TS]
Description = "test"
Driver = FreeTDS
Servername = SERVER
Server = SERVER
Port = 1433
Database = DBNAME
Trace = No

使用此命令确认您的实例/服务器配置:

tsql -LH servername

请记住,您只能指定一个实例或一个端口,不能同时指定两者。

确认设置后,使用此命令连接到服务器并打开交互式提示,您可以从中在服务器上运行 SQL 命令:

tsql -S servername -U username -P password

请记住,此用户应在数据库服务器本身上创建,并具有访问您的数据库的适当权限。

注意:如果问题仍然存在,在某些情况下,问题是由于配置文件中的缩进而出现的。因此,在 /etc/odbc.ini 中,删除所有缩进并重试。

于 2021-07-07T08:11:50.373 回答