Когда служба Windows запускается диспетчером управления службами, процесс выполняется как конкретный пользователь, как и любой другой процесс, выполняющийся в ОС.
Существует множество «встроенных» учетных записей пользователей, которые используются для работы служб Windows. Вы можете увидеть полный набор служб Windows и учетную запись, которую они запускают (называемый «Вход в систему как» в Windows 7), если вы посмотрите на узел «Службы» в «Управление компьютером».
Из моего опыта, когда мы хотим, чтобы служба Windows, чтобы поговорить с БД с помощью встроенной системы безопасности, мы принимаем второй подход ниже:
1) Назначьте одну из встроенных учетных записей, как «Log On As» учетной записи и добавить эту учетную запись в качестве входа в экземпляр SQL Server с соответствующими разрешениями базы данных
2) Используйте/создайте локальную учетную запись или учетную запись домена для службы Windows для использования, а затем добавьте эту учетную запись в качестве логина с соответствующей БД разрешения. Возможно, установщик может запросить учетные данные учетной записи пользователя во время установки службы.
Я не могу утверждать, что достаточно экспертом, чтобы указать на все плюсы и минусы каждого подхода, однако стоит учесть следующее:
с подходом 1 все услуги и процессы, которые запускаются в выбранной встроенная учетная запись получит разрешение на доступ к вашей базе данных. Это не относится к подходу 2.
с подходом 1 конфигурация пароля управляется самой машиной, но с подходом 2 пароль может управляться администраторами, а также соответствовать любым требуемым политикам безопасности.
Я надеюсь, что это помогает
спасибо. изменение пользователя для службы звучит хорошо. но как это можно сделать программно? Я хочу сделать это в моей программе C#, а не в консоли управления сервисами. –
@ räph: Некоторое время назад я предложил бы изучить API ADSI, но теперь вы сможете более легко «сходить со счетами» класс .NET System.ServiceProcess.ServiceController. Хотя я использую это для запуска/остановки служб, я никогда не изменял настройку службы таким образом. Другие подходы, которые я видел, порождают сетевую команду (хотя я не верю, что изменение сервиса возможно именно так), а совсем недавно с PowerShell (позволяет изменять свойства сервиса, хотя у меня нет опыта с этим. .). – mjv
LSA означает * Local Security Authorithy *, а не LocalService. http://msdn.microsoft.com/en-us/library/ms721592%28VS.85%29.aspx#_security_local_security_authority_gly#_security_local_security_authority_gly –