我想知道是否有一个可以推送的策略,默认客户端始终动态确定连接端口。我正在处理连接到远程 SQL 服务器的自定义 C# 应用程序。SQL
服务器详细信息 SQL Server 2008 R2 STD 实例 Windows Server 2008 STD C# 应用程序的 SQL 连接字符串被硬编码为使用默认的 1433 进行数据连接。但服务器\实例名称是一个可自定义的参数。SQL 服务器配置为通过配置管理器将实例绑定到特定的 IP 和端口 1433。该实例还配置为允许远程连接,并且没有任何防火墙问题,我可以使用 portqury.exe 来验证这一点。我还可以通过 netstat –abn 验证 sqlserver.exe 是否正在监听 1433。服务器上只有一个实例,并且没有任何接口 IP 配置为动态端口配置。我想补充一点,启用和禁用 sql 浏览器后我得到的结果相同。但由于只有一个实例,而且我没有使用动态端口,因此我不必使用 SQL 浏览器服务。我想我还应该补充一点,当我在启用浏览器服务的情况下进行测试时,端口 1434 是开放且可访问的。SQL 配置没有问题。
因此,使用 C# 应用程序进行测试时,我无法访问数据库服务器,也无法从多个系统获取不同的错误。但是,当我通过 ODBC 测试与 SQL 实例的连接时,我能够针对系统 (SQL Auth) 进行身份验证并访问所需的数据库。但是,在添加 ODBC 连接进行测试时,我必须在客户端上进行配置更改。选择 SQL Auth 选项,然后进入客户端配置选项并禁用“动态确定端口”复选框,以便它为连接指定端口 1433。添加该选项后,即使删除了我用于测试的 ODBC 连接,客户端软件也能够连接而不会出现任何其他问题。
这就是我的主要问题所在。是否有一个策略可以强制 Windows XP、Windows 7 系统的所有 SQL 连接始终使用动态端口进行数据连接?为什么在删除 ODBC 连接后,应用程序仍会连接到端口 1433 上的 SQL?我想我可以更进一步,使用进程资源管理器进行进程跟踪,并使用 TCPView 验证从新框到 SQL 实例的连接,然后再从客户端系统上的 ODBC 连接中删除“动态确定端口”选项。
任何见解或其他要点都可以进一步检查和调查。我将此问题发布给超级用户,因为这似乎是客户端问题,而不是服务器配置问题。
答案1
如果我没记错的话,在客户端计算机上设置 ODBC 连接(以管理员身份运行)应该允许您将端口设置为 *。
我假设你从微软查看过这个:如何配置 SQL Server 以侦听特定端口 http://support.microsoft.com/kb/823938
或者我首先想到的,服务器客户端网络实用程序在服务器本身上?
答案2
服务器端已配置并绑定到特定 IP 地址上的端口 1433。问题具体在于客户端尝试协商动态端口,而服务器上的端口已配置为静态端口。最终原因是其 AV 产品中的客户端设置不允许特定应用程序连接到端口 1434。
我能够通过 ODBC 动态查询端口,但无法通过自定义应用程序查询。我无法访问 AV 管理服务器或客户端密码来查看被阻止的连接。因为我的工作环境不是我完全管理的。