Quando un servizio di Windows viene avviato da Gestione controllo servizi, il processo viene eseguito come un utente particolare proprio come con qualsiasi altro processo in esecuzione sul sistema operativo.
Esistono numerosi account utente "incorporati" utilizzati per l'esecuzione di Servizi Windows. È possibile visualizzare il set completo di Servizi Windows e l'account che eseguono come (denominato "Accedi come" in Windows 7) se si guarda il nodo "Servizi" all'interno di Gestione computer ".
Dalla mia esperienza, quando vogliamo un servizio di Windows per parlare al DB utilizzando la protezione integrata prendiamo il secondo approccio seguito:
1) Assegnare uno degli account predefiniti come "Accesso come" account e aggiungi questo account come login sull'istanza di SQL Server con le autorizzazioni DB appropriate
2) Utilizzare/creare un account locale o di dominio per il servizio Windows da utilizzare e quindi aggiungere questo account come accesso con il DB appropriato permessi. È possibile attraverso il programma di installazione richiedere le credenziali dell'account utente durante l'installazione del servizio.
non posso affermare di essere abbastanza esperto per segnalare tutti i pro ei contro di ogni approccio, tuttavia vale la pena considerare le seguenti:
con l'approccio 1 tutti i servizi e processi che vengono eseguiti come selezionato l'account integrato avrà il permesso di accedere al tuo database. Questo non è il caso dell'approccio 2.
con approccio 1 la configurazione della password è gestita dalla macchina stessa ma con l'approccio 2 la password può essere gestita dagli amministratori e anche conforme alle eventuali politiche di sicurezza richieste.
Spero che questo aiuta
grazie. cambiare l'utente per il servizio suona bene. ma come può essere fatto programmaticamente? Voglio farlo nel mio programma C# - non nella console di gestione del servizio .. –
@ räph: Qualche tempo fa avrei suggerito di guardare nell'API ADSI, ma ora dovresti essere in grado di "fare casino con gli account" più facilmente con la classe .NET System.ServiceProcess.ServiceController. Sebbene io lo usi per avviare/fermare i servizi, non ho mai modificato le impostazioni di un servizio in questo modo. Altri approcci che ho visto stanno generando un comando net (anche se non credo che cambiare servizio sia possibile in quel modo) e più recentemente con PowerShell (non consente di modificare le proprietà di un servizio, anche se non ho esperienza con questo .. .). – mjv
LSA sta per * Local Security Authorithy *, non LocalService. http://msdn.microsoft.com/en-us/library/ms721592%28VS.85%29.aspx#_security_local_security_authority_gly#_security_local_security_authority_gly –