Встроенная защита SQL с использованием имени компьютера вместо имени пользователя - PullRequest
20 голосов
/ 20 июля 2011

Я пытаюсь создать экземпляр SQL Express в той же сети, проходя аутентификацию с пользователем моего домена. Он отлично работает с аутентификацией Windows в SSMS. Я подтвердил, что могу использовать базу данных MyDB, включая редактирование таблиц.

Однако, когда я пытаюсь использовать следующую строку подключения:

Server=ipaddress\SQLExpress; Database=MyDB; Integrated Security=SSPI;

Я получаю сообщение об ошибке:

Cannot open database "MyDB" requested by the login. The login failed. Login failed for user 'ROMANIA\MONSTER2$'

Проблема в том, что MONSTER2 - это имя моего компьютера, а не мое имя пользователя. (РУМЫНИЯ - это домен.) Что я делаю не так?

[Редактировать] Я забыл кое-что, что может иметь отношение: я пытаюсь открыть соединение через веб-сервис, запущенный на моем компьютере.

Ответы [ 3 ]

17 голосов
/ 20 июля 2011

Ваш веб-сервис работает в контексте безопасности NT AUTHORITY\Network Service. Это заставит процесс использовать учетную запись компьютера хоста при доступе к сетевым ресурсам в домене.

Вам потребуется настроить веб-службу для работы с идентификатором вашего домена.

Если вы размещаете свой веб-сервис в IIS, вы можете сделать это через олицетворение . Вот пример:

<configuration>
    <system.web>
        <identity
            impersonate="true"
            userName="ROMANIA\username" 
            password="********" />
    </system.web>
</configuration>
13 голосов
/ 20 июля 2011

Это связано с тем, что ваш веб-сервер настроен не для использования личности человека, использующего службу, а для идентификации компьютера, на котором он работает.

Проверьте, не используется ли ваш файл web.config длявеб-сервис содержит: <authentication mode="Windows" />

1 голос
/ 28 февраля 2018

Мне нужно было сделать оба в моей ситуации:

<authentication mode="Windows" />
    <authorization>
        <deny users="?" />
    </authorization>
<identity impersonate="true" />
...