间歇性ODBC连接失败

时间:2018-09-25 16:22:56

标签: sql-server odbc

我们正在开发内部32位应用程序。该应用程序连接到SQL Server。测试环境为SQL Server 2008 R2,实时环境为SQL Server 2014 SP2。

使用以下ODBC字符串建立与数据库的连接:

Driver={SQL Server};Server=<redacted>;Database=<redacted>;Trusted_Connection=Yes;

此数据库的用户属于“本地域”安全组。我们有来自三个不同AD域的用户作为该组的成员。该组被定义为SQL Server的登录名和目标数据库的用户。在测试环境中,这很好。

在实时环境中,只有部分用户可以成功连接到数据库。有趣的是,属于安全组但与服务器不在同一域中的用户可以连接。与服务器位于同一域中的用户不能。 (我尚未与所有25个用户进行核对,但这就是我所看到的模式)。对数据库服务器具有sysadmin权限的用户(如我)没有问题。

我已经用细齿梳仔细研究了所有我能想到的东西,试图弄清为什么它可以在一台服务器上运行而不能在另一台服务器上运行,但是没有运气。我尝试过以用户身份删除该组并添加回来,将用户从该组中删除,然后将其放回,依此类推。 SQL Server服务在两个服务器上的相同域帐户下运行。

任何见识都会受到赞赏。

2 个答案:

答案 0 :(得分:0)

过去,我遇到了很多问题,以下工作可行:

  1. 导航至开始| Microsoft SQL Server 2014年| SQL Server 2014配置管理器。

展开“ SQL Server网络配置”,然后单击2008实例。完成此操作后,您将在右侧看到共享内存,命名管道和TCP / IP。打开“命名管道”并启用它(如果已禁用)。打开TCP / IP并启用它,但是在TCP / IP上,您还会注意到一个名为IP Addresses的辅助选项卡。单击此选项卡,然后分别为所有IP地址(或仅要激活的IP地址)启用每个IP地址。 您还将注意到,存在一个TCP端口,其中SQL的默认端口为1433。但是,当您在同一台计算机上安装多个SQL实例时,我通常会拆分端口号。即第一个实例设置为1433,第二个实例设置为1435。请参见下面的屏幕截图:

enter image description here

请注意,我删除了TCP动态端口中的零。

结束时,像下面的屏幕截图一样设置它:

enter image description here

完成所有这些设置后,单击“应用”,单击“确定”,然后单击“确定”。

  1. 导航至开始|运行。

键入cliconfg(您必须在每台有连接问题的计算机上执行此操作),然后单击“确定”。

启用命名管道和TCP / IP,然后勾选启用共享内存协议选项,如下所示:

enter image description here

单击“应用”,然后单击“确定”。

  1. 导航至“开始运行”,键入services.msc,然后单击“确定”。

导航到两个SQL Server实例并重新启动它们。

还打开SQL Server浏览器,将其从“禁用”更改为“自动”,然后键入您的AD用户名和密码。

单击“应用”并单击“确定”,然后启动浏览器。

如果在此之后仍然有连接问题,请尝试禁用Windows防火墙或添加端口例外,如答案中前面所述。

如果您仍然有问题,请回复此答案,我们将为您提供进一步的帮助...

希望这会有所帮助。

答案 1 :(得分:0)

感谢Birel向我指出了正确的方向。答案是在新的2014服务器上,“ SQL Server浏览器服务”未运行。我将其设置为自动启动,然后启动了它。这样就解决了问题。