我有两个SQL server:一个在法国第戎;一个在美国科罗拉多州的阿瓦达。两者之间已建立数据复制。
当用户尝试连接到SQL Server 2008 R2 Dijon数据库时,一切工作正常。
但是当我的一个用户试图从VB连接到SQL Server 2012美国数据库时发生错误。网络应用程序。
错误是:
"与服务器的连接已成功建立,但在登录过程中发生错误(提供者:TCP提供者,错误:0 -远程主机强制关闭了现有连接)。"
此错误只显示给一个用户。其他的连接没有任何问题。我也许有个线索。我们已经遇到了他的连接问题,因为他属于许多AD安全组。
下面是连接字符串:
Data Source=serverinstance;Initial Catalog=db;Integrated Security=SSPI;Connection Timeout=0;
对于试图连接到同一台服务器的美国用户,我们有相同的问题。但当他试图连接第戎的时候就不是了。请问你有什么线索可以帮助我解决这个问题吗?
我从网上检查了StackOverflow线程和其他解决方案,但没有任何帮助我…
参考以下网址
故障处理:连接被强行关闭
TCP提供程序,错误:
连接被强行关闭
执行以下步骤
-
首先进入services,检查'SQL Server Browser'服务是否启动,如果没有启动服务
-
打开SQL Server Configuration Manager
- 启用所有协议
- 转到SQL本地客户端
- 选择Client Protocols and and Enable All
- 重启SQL Server服务
使用. .(.. NET Framework Data Provider for SQL Server)作为Provider
Connectionstring
- 数据源=serverinstance;初始目录=;持久安全信息=True;用户ID=;密码=;网络库=dbmssocn
正如我所料,这是一个Kerberos身份验证的问题,因为我的用户有太多AD安全组…这里解释了解决方案:当用户属于多个组时Kerberos身份验证的问题,这里是MaxTokenSize和Windows 8和Windows Server 2012
如果试图进行身份验证的用户的授权数据大于MaxTokenSize,则使用该协议的该连接的身份验证失败。
在Windows 7和Windows Server 2008R2上,MaxTokenSize
(Kerberos的默认缓冲区大小)是12k。它的大小在Windows 8和Windows Server 2012中增加到48k。这对我来说还不够。
我必须在注册表HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlLsaKerberosParametersMaxTokenSize
中添加一个键( REG_DWORD
类型到十进制值65535)。
然后我重新启动了服务器。
我的用户现在可以访问数据没有错误