it-swarm.com.de

SqlConnection Fehler, wenn EXE vom Netzwerkpfad ausgeführt wird

Zunächst einmal: Alles, was Sie in diesem Beitrag lesen werden, geschieht nur, wenn das Update Windows 10 April 2018 installiert ist. Kein Problem vor Installation und nach Update-Deinstallation.

Nach der Installation des Windows 10 1803-Updates können alle meine VB - Programme (VB6, .NET und WPF), die von einem über das Netzwerk zugewiesenen Laufwerk oder dem UNC-Pfad ausgeführt werden, keine Verbindung zum SQL-Server herstellen lokales Laufwerk (getestet auf 2 PCs im selben Netzwerk):

  1. Remote-SQL-Server, exe auf lokalem Laufwerk: OK
  2. Same Remote-SQL-Server, Same Exe auf einem zugeordneten Netzlaufwerk (mit vollem Lese-/Schreibzugriff): FEHLER

Dies ist der Fehler (möglicherweise nicht signifikant, um dieses Problem zu lösen):

Beim Herstellen einer Verbindung zu SQL Server ist ein netzwerkbezogener oder instanzspezifischer Fehler aufgetreten. Der Server wurde nicht gefunden oder war nicht erreichbar. Stellen Sie sicher, dass der Instanzname korrekt ist und dass SQL Server für das Zulassen von Remoteverbindungen konfiguriert ist. (Anbieter: SQL-Netzwerkschnittstellen, Fehler: 26 - Fehler bei der Suche nach Server/Instanz angegeben).

Einfacher VB.NET-Code zum Reproduzieren des Problems (Platzieren Sie den Code in einem einfachen Formular mit einer Schaltfläche im button_click -Ereignis, legen Sie Werte fest, um eine Verbindung zum SQL-Server herzustellen, kompilieren Sie die Exe-Datei in einem Netzwerkpfad und führen Sie sie aus.)

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

Ausnahme:

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

Irgendwelche Ideen?

Update: Wenn ich das Update vom April 2018 deinstalliere, wird das Problem behoben und das Programm funktioniert einwandfrei, auch wenn es auf einem Netzlaufwerk ausgeführt wird. Dies kann jedoch nicht die Lösung sein ...

Update 08/05/2018: Ich habe bemerkt, dass das Update vom April 2018 einige Sicherheitsänderungen brachte: _:

Windows 10, Version 1803, bietet zusätzlichen Schutz:

  • Neue Regeln zur Reduzierung der Angriffsfläche 
  • Kontrollierter Ordnerzugriff kann jetzt Plattensektoren blockieren

Könnte dies die Ursache des Problems sein? Ich bin kein Sicherheitsmanager, daher kann ich nicht sagen, ob dies zu meinem Problem führen kann

Update 09/05/2018: Ich habe diese Informationen in this post gefunden:

Windows 10 Update 1803 öffnet keine Netzwerkverbindungen unter ausführbare Dateien auf der SMBv1-Freigabe (als Windows Server 2003)

aber ich weiß nicht was SMBv1 ist ... kann mir jemand helfen?

20

Schließlich fand ich das Problem: Auf dem Server mit dem freigegebenen Ordner ist SMBv2 deaktiviert (ich weiß nicht warum), sodass nur SMBv1 aktiv ist. Dasselbe Programm, das von demselben Client im selben Netzwerk ausgeführt wird, sich aber auf einem Server befindet, auf dem SMBv2 aktiviert ist, funktioniert einwandfrei.

Das Problem ist also die SMBv1-Freigabe, die ab Windows 10 1803 nicht mehr empfohlen wird

16

Dieses Blog gibt eine Lösung dafür, die für uns funktioniert hat. Schauen Sie sich insbesondere die Antwort von "M.Hermann" an: Windows 10 1803 führt ODBC keine mit SQL verbundene Anwendung über das Netzwerk aus

Der folgende Link scheint zu erklären, warum SMBv1 deaktiviert ist: SMBv1 wird standardmäßig nicht in Windows 10 Fall Creators Update und Windows Server ab Version 1709 installiert

Ich bin mir nicht sicher, warum dies erst nach 1803 ein Problem zu sein scheint, da SMBv1 seit 1709 deaktiviert ist.

1
Charl

Ich habe dasselbe Problem mit einigen Anwendungen, die in "Rad Studio 10.2" geschrieben werden.

Ich finde eine Lösung für mich, ich ändere meine Verbindungszeichenfolge, indem ich den Parameter "Network Library = dbmssocn" lösche.

Ich ändere das:

Provider=SQLOLEDB.1;Password=MyPassword;Persist Security Info=True;User ID=MyUser;Initial Catalog=MyDb;Data Source=MyServer;Network Library=dbmssocn;

Zu diesem:

Provider=SQLOLEDB.1;Password=MyPassword;Persist Security Info=True;User ID=MyUser;Initial Catalog=MyDb;Data Source=MyServer

Jetzt funktionieren alle gut!

0
Olivier