2017-07-12 6 views
1

Ich habe eine Anwendung, die unter Windows unter einem bestimmten Dienstkonto ausgeführt werden muss. Die .NET-Anwendung einer Verbindung zu einer MSSQL-Datenbank und in der Verbindungszeichenfolge habe ich die SQL Server-Authentifizierung verwendet angegeben, nämlichSQL Server-Authentifizierung verhält sich unter verschiedenen Dienstkonten unterschiedlich

<add name="conn" connectionString="Data Source=(localdb)\MSSQLLocalDB;initial catalog=MyDB;User Id=testuser;Password=xxx" providerName="System.Data.SqlClient" /> 

Wenn ich SSMS unter meinem normalen Domänenkonto ausgeführt, dann kann ich den SQL-Benutzer verwenden ‚Testuser 'zur Verbindung mit der Datenbank. Wenn ich jedoch SSMS unter dem Dienstkonto ausführen, das die Anwendung ausführen soll, erhalte ich "Anmeldung fehlgeschlagen". (Und das gleiche passiert, wenn der Dienst ausgeführt wird).

Ich habe mehr als einen Tag in dieses Problem untersucht, also wenn jemand irgendwelche Ideen hat, was falsch sein könnte, würde ich es sehr schätzen.

Update: Die Fehlermeldung in dem SQL Server-Log ist

07/12/2017 12:18:32,Logon,Unknown,Login failed for user 'testuser'. Reason: 
Could not find a login matching the name provided. [CLIENT: <named pipe>] 
07/12/2017 12:18:32,Logon,Unknown,Error: 18456<c/> Severity: 14<c/> State: 5. 

Aber wenn ich auf SSMS log mein Domänenkonto 'Testuser' aufgeführt wird unter Sicherheit -> Logins.

Die SQL-Ausnahme, was geschieht, wenn ich versuche, den Dienst zu starten, ist

Der Dienst nicht erfolgreich System.Data.SqlClient.SqlException gestartet wurde (0x80131904): Anmeldung für den Benutzer ‚Testuser‘ ist fehlgeschlagen. bei System.Data.SqlClient.SqlInternalConnectionTds..ctor (DbConnectionPoolIdentity Identität, SqlConnectionString Connection, SqlCredential Berechtigungsnachweis, Object Provider, String newPassword, Secure newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, Session reconnectSessionData, DbConnectionPool Pool, String accessToken, Boolean applyTransientFaultHandling) bei System.Data.SqlClient.SqlConnectionFactory.CreateConnection (DbConnectionOptions Optionen, DbConnectionPoolKey poolKey, Objekt poolGroupProviderInfo, DbConnectionPool Pool, DbConnection owningConnection, DbConnectionOptions Useroptions)

ich habe einige der stacktrace weggelassen, weil es recht lang war.

+0

Ich habe die Frage mit der Protokollausgabe aktualisiert. Vielen Dank für Ihre Zeit! – SabrinaMH

+1

'(localdb)' ist lokal für einen bestimmten Benutzer. Verwenden Sie 'sqllocaldbb share' (über die Befehlszeile), um eine Instanz verfügbar zu machen, die für Benutzer verfügbar ist. –

+0

Das macht sehr viel Sinn!Ich lief den Befehl _sqllocaldb share "MSSQLLocalDB" "SharedLocalDB" _ gefolgt von _sqllocaldb info_ die _ in geführt. \ SharedLocalDB, MSSQLLocalDB, ProjectsV13_ Nun, wenn ich angeben _ (localdb) \ SharedLocalDB_ in die Verbindungszeichenfolge, erhalte ich den Fehler "Ein Netzwerk-bezogener oder instanzspezifischer Fehler ist beim Herstellen einer Verbindung zu SQL Server aufgetreten. Der Server wurde nicht gefunden oder war nicht erreichbar". – SabrinaMH

Antwort

2

(localdb) ist lokal für einen bestimmten Benutzer. Verwenden sqllocaldb share (von einer Eingabeaufforderung), um eine Instanz zu belichten, die über Benutzer verfügbar ist:

sqllocaldb share MSSQLLocalDB SharedLocalDB 

Wenn die Instanz läuft, muss er neu gestartet werden, bevor die gemeinsame Instanz verfügbar ist:

sqllocaldb stop MSSQLLocalDB 
sqllocaldb start MSSQLLocalDB 

Sie können jetzt eine Verbindung zur freigegebenen Instanz herstellen, wie unter (localdb)\.\SharedLocalDB (beachten Sie die zusätzlichen .\).

Beachten Sie, dass die beabsichtigte Verwendung von LocalDB isoliert getestet wird, ohne dass SQL Server verwaltet werden muss (tatsächlich gibt es nur sehr wenige Optionen für die Verwaltung). Wenn Sie eine Datenbankinstanz benötigen, die ständig verfügbar ist, sollten Sie eine SQL Server Express-Instanz installieren.

Verwandte Themen