[英]Cannot connect to remote SQL server
我的一个客户给了我一个完全限定的服务器名称[servername].somedomain.net
以尝试通过 VPN 连接到他们的 SQL Server 实例。
所以我尝试使用他们给我的用户名和密码。 没运气。 我可以ping通但无法连接,我收到用户名和密码不正确的错误。
所以我登录到实际的服务器,验证我的登录是安全的并且有权限并且它出现在那里。 Workgroup\\mylogin
看起来workgroup\\
实际上与somedomain.net\\mylogin
相同。 因为当我尝试添加somedomain.net\\mylogin
,它会说它已经添加了,即workgroup\\mylogin
。
不知道这里还有什么要检查的。 我在 SQL Server 中给了自己 sysadmin 角色。 我可以ping通服务器的IP。
我查看了他们如何对我进行身份验证,并且他们将我的 SQL Server 用户设置为使用 Windows 身份验证。 好吧,我得到的错误是当我尝试在我的管理工作室本地连接时尝试使用 Windows 身份验证时它不能信任跨域。 我已连接到他们的 VPN,那么可能是什么问题?
他们现在无法尝试对其进行故障排除,我只是想知道如果可以的话,我还可以尝试自己尝试解决什么问题。
基本上,当您无法连接到 SQL Server 时,问题可能是:
第 1 步:网络问题
您也许可以在没有工作网络的情况下建立本地连接,但这是一种特殊情况。 远程连接需要稳定的网络。 解决 SQL 连接问题的第一件事是确保我们依赖的网络可用且稳定。 请运行以下命令:
ping -a(专门针对 IPv4 和 IPv6 使用 -4 和 -6) ping -a nslookup(多次键入您的本地和远程机器名称和 IP 地址)
小心查看返回的结果是否有任何不匹配。 如果您无法 ping 目标计算机,则很有可能是网络损坏或目标计算机未运行。 不过,目标机器可能位于防火墙后面,并且防火墙阻止了 ping 发送的数据包。 默认情况下,Windows 防火墙不会阻止 ping (ECHO) 数据包。 网络上 DNS 配置的正确性对于 SQL 连接至关重要。 错误的 DNS 条目可能会导致以后出现各种连接问题。 请参阅此链接,例如“无法生成 SSPI 上下文”错误消息、中毒 DNS。
第 2 步:SQL Server 配置问题
您需要确保目标 SQL Server 正在运行并且正在侦听适当的协议。 您可以使用 SQL Server 配置管理器 (SCM) 在服务器计算机上启用协议。 SQL Server 支持共享内存、命名管道和 TCP 协议(以及需要特殊硬件且很少使用的 VIA)。 对于远程连接,必须启用 NP 和/或 TCP 协议。 在 SCM 中启用协议后,请确保重新启动 SQL Server。
您可以打开错误日志文件以查看服务器是否成功侦听任何协议。 错误日志文件的位置通常在: %ProgramFile%Microsoft SQL Server/MSSQLxx.xxx/MSSQL/Log 如果目标 SQL 实例是命名实例,您还需要确保 SQL Browser 正在目标机器上运行。 如果您无法访问远程 SQL Server,请询问您的管理员以确保所有这些都发生。
第 3 步:防火墙问题
SQL Server 计算机(或客户端和服务器之间的任何位置)上的防火墙可能会阻止 SQL 连接请求。 如果可以的话,隔离防火墙问题的一个简单方法是短时间关闭防火墙。 长期解决方案是为 SQL Server 和 SQL Browser 设置例外。
对于 NP 协议,请确保文件共享在防火墙例外列表中。 文件共享和 NP 都在底层使用 SMB 协议。 对于 TCP 协议,需要将 SQL Server 侦听的 TCP 端口设置为异常。 对于 SQL 浏览器,请将 UDP 端口 1434 设置为例外。 同时,您也可以将 sqlservr.exe 和 sqlbrowser.exe 放入异常中,但不建议这样做。 我们不信任的机器之间的 IPSec 也可能阻止一些数据包。 请注意,防火墙不应成为本地连接的问题。
步骤 4:客户端驱动程序问题
在此阶段,您可以使用一些工具测试您的连接。 测试肯定需要在客户端机器上完成。
首先尝试:telnet 如果启用了 TCP,您应该能够 telnet 到 SQL 服务器的 TCP 端口。 否则,返回检查步骤 1-3。 然后使用OSQL、SQLCMD和SQL Management Studio来测试sql连接。 如果您没有这些工具,请从 Microsoft 下载 SQL Express,您可以免费获得这些工具。
OSQL(SQL Server 2000 附带的那个)使用 MDAC。 OSQL(SQL Server 2005 和 2008 附带的那个)使用 SNAC ODBC。 SQLCMD(随 SQL Server 2005 和 2008 一起提供)使用 SNAC OLEDB。 SQL Management Studio(随 SQL Server 2005 和 2008 一起提供)使用 SQLClient。
可能的命令使用是: osql -E -SYour_target_machine\\Your_instance for Windows Auth osql -Uyour_user -SYour_target_machine\\Your_instance for SQL Auth
SQLCMD 也适用于此。 此外,您可以对 TCP 使用“-Stcp:Your_target_machine, Tcp_port”,对 NP 使用“-Snp:Your_target_machine\\Your_instance”,对共享内存使用“-Slpc:Your_target_machine\\Your_instance”。 您会知道它是否适用于所有协议或仅适用于某些特定协议。
在此阶段,您不应再看到诸如错误 26 和错误 40 之类的一般错误消息。 如果您正在使用 NP 并且仍然看到错误 40(命名管道提供程序:无法打开与 SQL Server 的连接),请尝试以下步骤:a) 在您的服务器计算机上打开文件共享。 b) 运行“net view \\your_target_machine”和“net use \\your_target_machine\\your_share”(您也可以尝试从 Windows 资源管理器中映射网络驱动器)如果您在 b) 中失败,则很可能您有操作系统/网络配置问题,这不是特定于 SQL Server 的。 请先在互联网上搜索以解决此问题。
您可以尝试使用 Windows 身份验证和 SQL 身份验证进行连接。 如果所有工具的测试都失败了,很可能是步骤 1-3 设置不正确,除非失败与登录相关,否则您可以查看步骤 6。
如果您使用某些工具成功,但使用其他工具失败,则可能是驱动程序问题。 您可以在我们的论坛上发布问题并向我们提供详细信息。
您还可以使用“\\windows\\system32\\odbcad32.exe”(Windows 附带的)通过为各种驱动程序添加新的 DSN 来测试连接,但这仅适用于 ODBC。
第五步:申请问题
如果您通过第 1-4 步成功,但仍然看到您的应用程序失败,则可能是您的应用程序中的配置问题。 在这里考虑几个可能的问题。 a) 您的应用程序是否与您在步骤 4 中进行测试的帐户在同一帐户下运行? 如果没有,您可能希望在该帐户下尝试在第 4 步中进行测试,或者如果可能,更改为您的应用程序的可用服务帐户。 b) 您的应用程序使用哪个 SQL 驱动程序? c) 你的连接字符串是什么? 连接字符串是否与您的驱动程序兼容? 请查看http://www.connectionstrings.com/以供参考。
第 6 步:身份验证和登录问题这可能是 sql 连接问题最困难的部分。 它通常与您的网络、操作系统和 SQL Server 数据库上的配置有关。 对此没有简单的解决方案,我们必须逐案解决。 sql_protocols 中已经有几篇博客讨论了一些特殊情况,您可以检查它们是否有任何适用于您的情况。 除此之外,要记住的事情:a) 如果您使用 SQL 身份验证,则必须启用混合身份验证。 检查此页面以供参考http://msdn.microsoft.com/en-us/library/ms188670.aspx b) 确保您的登录帐户对登录期间使用的数据库(OLEDB 中的“初始目录”)具有访问权限。 c) 检查系统上的事件日志,看看是否有更多信息
参考: http : //blogs.msdn.com/b/sql_protocols/archive/2008/04/30/steps-to-troubleshoot-connectivity-issues.aspx
对不起,这堵文字墙,我希望这里的内容可以帮助您解决问题!
问候。
如果您想访问该服务器,您将需要来自该域的域帐户或使用 SQL 身份验证。 我建议只使用 SQL 身份验证 - 如果他们允许的话,它会更直接。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.