Почему при подключении к SQL Server основное приложение asp.net использует идентификацию пользователя, отличную от идентификатора AppPool для проверки подлинности Windows? - PullRequest
0 голосов
/ 24 января 2019

Я развернул веб-приложение asp.net core 2.2 как веб-сайт для IIS.Я установил идентификатор пула приложений в ApplicationPoolIdentity:

[IIS Screenshol[1]

Я вижу, что System.Security.Principal.WindowsIdentity.GetCurrent() возвращает

IIS APPPOOL\MyCustomAppPool

Но когда я пытаюсь подключитьсяк SQL Server, используя строку подключения:

Server=localhost;Database=MyDadatabse;Trusted_Connection=True;

Я получаю следующую ошибку (игнорируйте немецкий):

SqlException: Fehler bei der Anmeldung für den Benutzer "CompanyDomain \ ComputerName $".

Почему он не использует идентификатор ApplicationPool?

Также обратите внимание, что когда я устанавливаю пользовательское имя пользователя / пароль в качестве идентификатора для пула приложений, он работает.

1 Ответ

0 голосов
/ 24 января 2019

Чтобы пояснить это, APPPOOL\MyCustomAppPool, как LocalServer, NetworkService и SID для каждой услуги, являются локальными идентификаторами.Они не существуют в домене и поэтому не могут быть использованы для доступа к удаленному ресурсу.Однако сам сервер имеет учетную запись в домене, и когда код, работающий под этими удостоверениями, обращается к удаленным ресурсам, они используют учетную запись компьютера.

Если у вас есть несколько идентификаторов пулов приложений на сервере IIS и вам необходимо разграничить их доступ к сетевым ресурсам или предотвратить накопление привилегий для учетной записи компьютера, вам потребуется подготовить учетные записи домена для пулов приложений.

Если вы подключаетесь к локальному SQL-серверу с использованием удостоверения пула приложений, в сообщении об ошибке (сбивает с толку) будет указано, что вы подключаетесь к учетной записи компьютера.Это недостаток, как SQL Server сообщает об ошибке.Например, если я попытаюсь подключиться к локальному серверу SQL из приложения IIS, произойдет сбой с

Login failed for user 'MyDomain\MyServer$'

, пока я не предоставлю доступ к локальному серверу SQL с помощью

create login [IIS APPPOOL\DefaultAppPool] from windows
create user [IIS APPPOOL\DefaultAppPool] for login [IIS APPPOOL\DefaultAppPool]
grant select to [IIS APPPOOL\DefaultAppPool]
...