首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FreeTDS TSQL不使用freetds.conf

FreeTDS TSQL不使用freetds.conf
EN

Stack Overflow用户
提问于 2018-05-29 08:38:50
回答 2查看 1.5K关注 0票数 0

我使用的是来自HomeBrew的freetds版本1.00.91。当我绕过freetds.conf时,我可以成功地连接,例如使用以下命令

代码语言:javascript
复制
tsql -H {my_hostname} -p {port_no} -U {username} -P {password}

但是,当我试图

代码语言:javascript
复制
tsql -S MYMSSERVER -U {username} -P {password}

它失败了,但有以下错误:

Msg 40532 (严重程度20,状态1) 无法打开登录请求的服务器"MYSERVER“。登录失败。 错误20002 (严重程度9): 自适应服务器连接失败 连接到服务器时出现问题。

freetds.conf内容如下:

代码语言:javascript
复制
[MYSERVER]
        host = {my_hostname}
        port = {port_no}
        tds version = 7.3

我检查了tsql -C的输出,确认7.3也是-H -p命令使用的版本。

以下是freetds.log文件中有关此错误的一些相关信息:

代码语言:javascript
复制
15:49:43.391174 3380 (token.c:313):looking for login token, got  aa(ERROR)
15:49:43.391215 3380 (token.c:132):tds_process_default_tokens() marker is aa(ERROR)
15:49:43.391240 3380 (mem.c:653):tds_free_all_results()
15:49:43.391258 3380 (token.c:2384):tds_process_info() reading message 40532 from server
15:49:43.391308 3380 (token.c:2456):tds_process_info() calling client msg handler
15:49:43.391391 3380 (token.c:2473):tds_process_info() returning TDS_SUCCESS
15:49:43.391418 3380 (token.c:313):looking for login token, got  fd(DONE)
15:49:43.391442 3380 (token.c:132):tds_process_default_tokens() marker is fd(DONE)
15:49:43.391471 3380 (token.c:2082):tds_process_end: more_results = 0

谢谢你的帮助!

EN

回答 2

Stack Overflow用户

发布于 2018-05-30 02:35:04

我让它发挥作用,更具体地说,它最终以一种黑客的方式与unixODBC一起工作。

这是我的freetds.conf文件

代码语言:javascript
复制
[my_hostname]
        host = {my_hostname}
        port = {port_no}
        tds version = 7.3

下面是我的odbc.ini文件

代码语言:javascript
复制
[Foo]
Description         = Test to SQLServer
Driver              = FreeTDS
Servername          = {the_same_my_hostname_as_in_freetds.conf}
Database            = BingMigration

然后,isql Foo {username} {password}就像一种魅力。

为什么要工作:

根据tsql人,如果在-S中找不到servername,tsql将把freetds.conf值作为主机名。这就是为什么上述freetds.conf能够工作的原因。我需要使用freetds.conf命名my_hostname部分,因为isql似乎需要一个与freetds.conf中的第一个参数匹配的DSN。简单地使用freetds.conf中没有对应部分的主机名在我尝试时失败了。

票数 0
EN

Stack Overflow用户

发布于 2018-05-30 12:17:08

这里有点混乱。use直接使用libTDS,因此freetds.conf虽然isql是一个ODBC程序,但主要使用odbc.ini (在odbc.ini上这是作为注册表项存储的)。isql不需要节名,术语是DSN名称。这里没有server_url,名称通常是主机名,就像DNS名称一样。一个对调试这些问题有用的环境是TDSDUMPCONFIG。初始问题中的freetds.conf似乎是正确的,服务器返回aa消息(ERROR)这一事实似乎表明存在TCP连接。根据https://learn.microsoft.com/en-us/azure/sql-database/sql-database-develop-error-messages错误,40532Cannot open server "%.*ls" requested by the login. The login failed

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50579886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档