Я написал простое приложение ASP.NET, которое работает в качестве интерфейса для простой базы данных MSSQL. Приложение доступно через Интернет.
Используются два физических сервера: контроллер домена Active Directory WS2008R2, на котором также работает MSQL Server 2008 R2, и другой сервер, веб-сервер (WS2008R2 / IIS7.5), на котором находится мое приложение.
Пул приложений для моего приложения "FooPool" имеет собственный идентификатор пользователя AD, который запускается под именем "FooUser". FooUser не имеет каких-либо разрешений на доступ к базе данных SQL Server, вместо этого только разрешение имеет моя личная учетная запись «MyUser».
Идея состоит в том, что при попытке доступа к этому веб-приложению сначала выполняется проверка подлинности Windows с IIS, а затем мое веб-приложение использует олицетворение для доступа к базе данных SQL Server.
Однако мое приложение не работает.
Я тестировал приложение, не касаясь SQL Server, просто чтобы проверить олицетворение, поэтому я сделал Response.Write (WindowsIdentity.GetCurrent (false) .Name); который правильно показывает приложение, подражающее MyUser и не выступающее в качестве FooUser. Это работает из всех современных браузеров и через Интернет.
Но как только он касается MSSQL Server, я получаю сообщение об ошибке «Не удалось войти в систему для пользователя 'NT AUTHORITY \ ANONYMOUS LOGON'". но этого не должно происходить, потому что никакие пользовательские токены не предназначены для анонимного входа.
Я сделал свою домашнюю работу и прочитал все о делегировании и олицетворении в ASP.NET, и я настроил делегирование: учетная запись FooUser имеет настройку имени участника-службы (я установил SPN в произвольную строку, правильно делаешь?) и помечен для делегирования в ADUC.
Наконец, в моей строке подключения включен SSPI, отключен пул подключений, и для сетевой библиотеки задано значение "dbmssocn".
Что еще я забыл?