我有两个SQL Server:一个在法国第戎;一个在美国科罗拉多州的阿瓦达。已经在它们之间建立了数据复制。
当用户尝试连接到SQL Server 2008 R2 Dijon数据库时,一切正常。
但当我的一个用户尝试从VB.Net应用程序连接到SQL Server 2012 US数据库时,会发生错误。
错误是:
“已成功与服务器建立连接,但在登录过程中发生错误(提供程序:TCP提供程序,错误:0 - 远程主机强行关闭现有连接。)”
此错误仅针对一个用户显示。其他人可以毫无问题地连接。我对此有一个线索。 我们已经遇到过他的连接问题,因为他属于许多AD安全组。
这是连接字符串:
Data Source=server\instance;Initial Catalog=db;Integrated Security=SSPI;Connection Timeout=0;
对于尝试连接到同一服务器的美国用户,我们遇到同样的问题。但是当他试图连接到第戎时。你有什么线索可以帮助我解决这个问题吗?
我从网上检查了StackOverflow线程和其他解决方案,但没有任何帮助我......
答案 0 :(得分:0)
参考以下网址
Troubleshooting: Connection Forcibly Closed
connection was forcibly closed
请按照以下步骤操作
首先转到服务并检查“SQL Server Browser”服务是否已启动,如果没有启动该服务。
打开SQL Server配置管理器
使用..(.NET Framework数据提供程序用于SQL Server)作为提供程序
的ConnectionString
答案 1 :(得分:0)
正如我所料,这是 Kerberos身份验证的问题,因为我的用户有太多的AD安全组...... 此处解释了解决方案:Problems with Kerberos authentication when a user belongs to many groups和此处MaxTokenSize and Windows 8 and Windows Server 2012
如果尝试进行身份验证的用户的授权数据大于MaxTokenSize,则使用该协议对该连接的身份验证失败。
在Windows 7和Windows Server 2008R2上,MaxTokenSize
(Kerberos的默认缓冲区大小) 12k 。它在Windows 8和Windows Server 2012中的大小已经增加到 48k 。这对我的案子来说还不够。
我必须在注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters\MaxTokenSize
( REG_DWORD
类型中添加一个键到十进制值 65535 )。
然后我重新启动了服务器。
我的用户现在可以毫无错误地访问数据。