【发布时间】:2014-09-11 08:20:07
【问题描述】:
由于某种原因,我似乎无法连接到我们网络之外的任何 SQL Server,但如果我通过 VPN 在网络内,则没有问题。我的代码是用于本地连接的:
sql = pyodbc.connect(
'DRIVER={FreeTDS};'
'SERVER=192.168.1.xx\ROA;'
'DATABASE=RentalDB;'
'UID=xxxxxxx;'
'PWD=xxxxxxx'
)
以下是我正在尝试的远程操作:
sql = pyodbc.connect(
'DRIVER={FreeTDS};'
'SERVER=69.178.xx.xx/ROA;'
'DATABASE=RentalDB;'
'UID=xxxxxxxx;'
'PWD=xxxxxxxx'
)
在尝试连接时,大约 15 秒左右后出现以下错误:
pyodbc.Error: ('08001', '[08001] [unixODBC][FreeTDS][SQL Server]无法 连接到数据源 (0) (SQLDriverConnect)')
我能够通过 SQL Server Management Studio 成功连接,并且我们有一个 C# 开发人员在建立连接方面没有问题,但由于某种原因,我不能。我正在运行 Python 2.7、Debian 7、FreeTDS 0.91 和 PYODBC 3.0.7。我认为 SQL Server 版本是 2012。有什么想法吗?
编辑:在远程连接上,我尝试了以下 'SERVER=' 字符串:
69.178.xx.xx/ROA
69.178.xx.xx\ROA
mssql://69.178.xx.xx/ROA
mssql://69.178.xx.xx\ROA
69.178.xx.xx:1433/ROA
69.178.xx.xx:1433\ROA
mssql://69.178.xx.xx:1433/ROA
mssql://69.178.xx.xx:1433\ROA
它们都返回相同的错误。
编辑 2:修复了上述内容的端口号。
【问题讨论】:
-
1) 请确认您使用的是实际服务器 IP 而不是 69.178.xx.xx。 2) 默认的ms-sql 端口是1433 而不是1443, 3) 请确认您是否在运行非标准端口。 4) 确认 ROAMBA 是正确的服务器实例名称。 5) 确认您实际上可以连接到服务器端口——即没有防火墙问题 telnet 69.178.xx.xx 1433 不应给出类似于 Connecting To 69.178.xx.xx...Could not open connection to the host 的消息,在端口 1433 上:如果是这样,您将被阻止。
-
@GaryWalker 哎呀,1443 只是我在这里输入一次,然后复制并粘贴其余部分。我实际上使用的是 1433。服务器 ip 是正确的,我可以远程登录到它,似乎没有任何防火墙问题。 ROAMBA 是正确的服务器实例名称,在本地连接字符串上使用时运行良好。
-
好的,您遇到了最常见的问题。检查以确保您的服务器允许远程连接搜索“启用远程连接 sql2008”等。您不识别 sql server 版本,请添加。确保您的服务器配置为允许非 Windows 身份验证搜索“更改 sql server 身份验证模式”您想要的混合模式。
-
另外,尝试通过 sql 命令行工具进行连接。例如。 sqlcmd -s localhost -U sa -P 密码——可能是应用程序问题。如果这可行,则问题可能是您的应用程序没有使用您认为的连接字符串,或者您需要在 sql server 上将您的应用程序列入白名单
-
如果您已将命名实例端口号更改为 1433(通常用于默认实例),请尝试在连接字符串中省略实例名称并单独指定 IP 地址。
标签: python sql sql-server pyodbc freetds