【发布时间】:2018-05-04 09:49:18
【问题描述】:
首先:您将在这篇文章中阅读的所有内容仅在安装 Windows 10 April 2018 更新时才会发生。没有问题之前安装和之后更新卸载。
安装 Windows 10 1803 更新后,我所有从网络映射驱动器或 UNC 路径运行的 VB 程序(VB6、.NET 和 WPF)都无法连接到 SQL 服务器,如果从本地放置并执行相同的可执行文件则没有问题驱动器(在同一网络中的 2 台电脑上测试):
- 远程 SQL 服务器,本地驱动器上的 exe:确定
- 相同远程 SQL 服务器,映射网络驱动器上的 相同 exe(具有完全读/写访问权限):错误
这是错误(可能对解决这个问题没有意义):
在建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。 (提供者:SQL 网络接口,错误:26 - 错误定位服务器/指定的实例)。
重现问题的简单VB.NET代码(将代码放在button_click事件中带有按钮的简单形式,设置值连接到SQL服务器,编译,将exe文件保存在网络路径上并执行它):
Dim myConnectionString As String
Dim mySqlConnectionStringBuilder As New SqlConnectionStringBuilder()
mySqlConnectionStringBuilder.DataSource = myServer
mySqlConnectionStringBuilder.InitialCatalog = myDatabase
mySqlConnectionStringBuilder.UserID = myUtente
mySqlConnectionStringBuilder.Password = myPassword
myConnectionString = mySqlConnectionStringBuilder.ConnectionString
Dim mySqlConnection As New SqlConnection(myConnectionString)
mySqlConnection.Open() <- error
例外:
System.Data.SqlClient.SqlException (0x80131904): Si è verificato un errore di rete o specifico dell'istanza mentre si cercava di stabilire una connessione con SQL Server. Il server non è stato trovato o non è accessibile. Verificare che il nome dell'istanza sia corretto e che SQL Server sia configurato in modo da consentire connessioni remote. (provider: SQL Network Interfaces, error: 26 - Errore nell'individuazione del server/dell'istanza specificata)
in System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, DbConnectionPool pool, String accessToken, Boolean applyTransientFaultHandling, SqlAuthenticationProviderManager sqlAuthProviderManager)
in System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
in System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions)
in System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
in System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
in System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)
in System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
in System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
in System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
in System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
in System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry)
in System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
in System.Data.SqlClient.SqlConnection.Open()
in RiepilogoOreTimer.RiepilogoOreTimerWindow.ConnessioneOK()
ClientConnectionId:00000000-0000-0000-0000-000000000000
Error Number:-1,State:0,Class:20
有什么想法吗?
更新: 如果我卸载 2018 年 4 月的更新,问题就会消失,即使在网络驱动器上执行程序也能正常工作,但这不是解决方案......
2018 年 8 月 5 日更新: 我注意到 2018 年 4 月的更新带来了一些 changes in security:
Windows 10 版本 1803 提供额外的保护:
- 新的攻击面减少规则
- 受控文件夹访问现在可以阻止磁盘扇区
这可能是问题的原因吗? 我不是安全经理,所以我不能说这是否会导致我的问题
2018 年 9 月 5 日更新:我在 this 帖子中找到了此信息:
Windows 10 更新 1803 无法打开网络连接 SMBv1 共享上的可执行文件(如 Windows Server 2003)
但我不知道 SMBv1 是什么...有人可以帮助我吗?
【问题讨论】:
-
我已经阅读了四五个与您类似的实例,它们表明它在网络级别阻塞(如果您在某处打开 TCP 套接字,它也会失败,您收到的错误支持这一点好)。我会尝试像 Putty 这样的东西来测试它。我还会查看 Windows 防火墙,看看它是否导致了问题(例如,它可能是阻止连接的原因)。
-
我已经尝试禁用防火墙,但问题仍然存在。
-
我不认为连接在网络级别被阻止,因为如果从本地驱动器和 SQL Management Studio 执行程序,同一台电脑可以连接到同一台服务器。 IMO,Windows 集成 SQL 客户端 2018 年 4 月更新发生了一些变化
-
我可以验证这发生在 VB6/VB.NET/WPF 之外。我们已经在一种称为 DataFlex 和 Delphi 的小众语言中发生了这种情况。
-
尝试禁用 windows Defender 看看是否有帮助?
标签: sql-server vb.net windows-10