Wenn ein Windows-Dienst vom Dienststeuerungs-Manager gestartet wird, wird der Prozess als ein bestimmter Benutzer ausgeführt, genau wie bei jedem anderen Prozess, der auf dem Betriebssystem ausgeführt wird.
Es gibt eine Reihe von "integrierten" Benutzerkonten, die zum Ausführen von Windows-Diensten verwendet werden. Sie können den vollständigen Satz der Windows-Dienste und das Konto, unter dem sie ausgeführt werden (in Windows 7 "Anmelden als" genannt) sehen, wenn Sie sich den Knoten "Dienste" in der Computerverwaltung ansehen.
Aus meiner Erfahrung, wenn wir ein Windows-Dienst sollen die DB mit integrierten Sicherheit, die wir unter den zweiten Ansatz sprechen:
1) Vergeben Sie einen der integrierten Konten als „Anmelden als“ Konto und fügen Sie dieses Konto als Anmeldung auf der SQL Server-Instanz mit den entsprechenden DB-Berechtigungen
2) Verwenden Sie/erstellen Sie eine lokale oder Domänenkonto für den Windows-Dienst zu verwenden und dann dieses Konto als Login mit der entsprechenden DB hinzufügen Berechtigungen. Es ist möglich, dass das Installationsprogramm während der Installation des Dienstes nach den Anmeldeinformationen des Benutzerkontos fragt.
Ich kann nicht behaupten, Experte genug, um alle Profis darauf hin-und Nachteile der einzelnen Ansätze, jedoch lohnt es sich, unter Berücksichtigung der folgenden:
mit Ansatz 1 alle Dienste und Prozesse, wie die ausgewählte laufen Das integrierte Konto verfügt über die Berechtigung, auf Ihre Datenbank zuzugreifen. Dies ist bei Approach 2 nicht der Fall.
Bei Approach 1 wird die Passwortkonfiguration von der Maschine selbst verwaltet, aber bei Approach 2 kann das Passwort von den Administratoren verwaltet werden und den erforderlichen Sicherheitsrichtlinien entsprechen.
Ich hoffe, das hilft
danke. Ändern des Benutzers für den Dienst klingt gut. aber wie kann das programmatisch gemacht werden? Ich möchte das in meinem C# -Programm tun - nicht in der Service-Management-Konsole. –
@ raph: Vor einiger Zeit hätte ich vorgeschlagen, in die ADSI-API zu schauen, aber jetzt sollten Sie in der Lage sein, mit Accounts einfacher zu verfahren die .NET System.ServiceProcess.ServiceController-Klasse. Obwohl ich dies zum Starten/Stoppen von Diensten verwende, habe ich die Einstellung eines Dienstes auf diese Weise nie geändert. Andere Ansätze, die ich gesehen habe, erzeugen einen net-Befehl (obwohl ich glaube nicht, dass der Dienst so geändert werden kann) und neuerdings mit PowerShell (erlaubt das Ändern von Diensteigenschaften, obwohl ich auch keine Erfahrung damit habe .. .). – mjv
LSA steht für * Local Security Authorithy *, nicht LocalService. http://msdn.microsoft.com/en-us/library/ms721592%28VS.85%29.aspx#_security_local_security_authority_gly#_security_local_security_authority_gly –