Подтвердить что ты не робот

Как подключиться к sql-серверу с помощью проверки подлинности Windows из Windows-сервиса?

Я запрограммировал службу Windows на С#, которая должна подключаться к базе данных SQL Server 2005 Express с помощью System.Data.SqlClient.

Поскольку Microsoft предпочитает использовать проверку подлинности Windows через проверку подлинности SQL, я попытался подключиться к базе данных с надежной связью/интегрированной безопасностью.

Однако это не работает, поскольку я получаю System.Data.SqlClient.SqlException: Ошибка входа в систему для пользователя "NT AUTHORITY\LOCAL SERVICE".

Возможно ли войти в систему с другой учетной записью Windows?

4b9b3361

Ответ 1

В настоящий момент служба работает в настоящее время под LocalService Account, и эта учетная запись службы в настоящее время не разрешена для SQL.

Ситуацию можно устранить одним из двух способов: запустить учетную запись под учетной записью, которая авторизована в SQL, или добавить учетную запись LocalService в качестве входа в SQL. В частности:

  • Измените учетную запись, на которую запущена служба, в консоли управления сервисом. (например, "Управление компьютером" и "Службы и приложения" ), затем щелкните правой кнопкой мыши "Свойства" в соответствующей службе).
  • В качестве альтернативы, в "Microsoft SQL Management Studio" добавьте учетную запись LSA в качестве логина и установите этот новый главный (логин) таким образом, чтобы он мог обращаться к желаемым объектам базы данных.

Изменить. Первый подход, вероятно, предпочтителен, поскольку учетная запись LocalService настолько широко внедрена в системе, что предоставление ему доступа к SQL приведет к тому, что SQL и базы данных будут использовать конкретную службу или драйвер, становятся скомпрометированными.
Вместо того, чтобы вводить определенную учетную запись, есть больший контроль над тем, кто обращается к объектам SQL и тому, как это сделать. Это, конечно же, приводит к необходимости настройки такой учетной записи в отношении привилегий, которые ей должны быть предоставлены, на уровне системы (а не SQL), и в зависимости от того, что делает базовая услуга, возможно, потребуется сделать эту учетную запись довольно мощный, следовательно, потенциальная ответственность другими способами....

Ответ 2

Когда служба Windows запускается диспетчером управления службами, процесс выполняется как конкретный пользователь, как и любой другой процесс, выполняющийся в ОС.

Существует ряд "встроенных" учетных записей пользователей, которые используются для работы служб Windows. Вы можете увидеть полный набор Служб Windows и учетную запись, которую они запускают (так называемый "Вход в систему как" в Windows 7), если вы посмотрите на "Услуги" node в Управление компьютером ".

Из моего опыта, когда мы хотим, чтобы служба Windows говорила с БД, используя интегрированную защиту, мы применяем второй подход ниже:

1) Назначьте одну из встроенных учетных записей в качестве учетной записи "Вход в систему" ​​и добавьте эту учетную запись в качестве входа в экземпляр SQL Server с соответствующими разрешениями на доступ к базе данных

2) Используйте/создайте локальную или доменную учетную запись для службы Windows для использования, а затем добавьте эту учетную запись в качестве логина с соответствующими разрешениями БД. Возможно, установщик может запросить учетные данные учетной записи пользователя во время установки службы.

Я не могу претендовать на достаточную квалификацию, чтобы указать на все плюсы и минусы каждого подхода, однако стоит учесть следующее:

  • с подходом 1 все службы и процессы, которые запускаются как выбранная встроенная учетная запись, будут иметь доступ к вашей базе данных. Это не относится к подходу 2.

  • с подходом 1 конфигурация пароля управляется самой машиной, но с подходом 2 пароль может управляться администраторами, а также соответствовать любым требуемым политикам безопасности.

Я надеюсь, что это поможет

Ответ 3

Если вы хотите использовать надежную проверку подлинности Windows, проще всего запустить службу с учетной записью домена (с минимальными требуемыми привилегиями), которая разрешена для базы данных sql-сервера.

Ответ 4

Вам необходимо предоставить доступ к учетной записи LOCAL SERVICE в SQL Express. В соответствии с моим комментарием, я бы посоветовал создать новую учетную запись, с которой может работать ваша служба, а затем добавить соответствующие разрешения внутри SQL Express, другими словами, не запускать службу в LOCAL SERVICE.

Ответ 5

Как указано в mjv, вам нужно либо предоставить доступ к учетной записи локальной службы в базу данных, либо использовать другую учетную запись для запуска службы. Вы спросили, как вы можете программно изменить учетную запись, которая выполняется путем создания установщика для службы и изменения свойства учетной записи "Пользователь", а затем указания имени пользователя и пароля для запуска службы.

Следующая ссылка содержит информацию о создании установщика, если вы прокрутите страницу вниз:

http://msdn.microsoft.com/en-us/library/aa984464(VS.71).aspx

В нижеследующем приведено более подробное описание свойства Account:

http://msdn.microsoft.com/en-us/library/system.serviceprocess.serviceprocessinstaller.account(VS.71).aspx

Надеюсь, что это поможет.