У меня есть несколько серверов (все на одном DC) в среде интрасети в моей компании. Для простоты я сосредоточу свой вопрос на серверах IIS и SQL. У меня есть веб-сервер IIS 7.5 и удаленный SQL Server 2005 на другом компьютере в домене.
Вот мои требования к тому, чего я надеюсь достичь:
select suser_sname()
должен возвращать фактическое имя пользователя, выполняющего действия с БД через веб-приложение IIS.Я потратил как минимум пару недель (в совокупности) на то, чтобы исследовать это время от времени за последние несколько лет, поскольку у меня было время, но безрезультатно. Пожалуйста, помогите мне сначала понять, возможно ли выполнить эти требования (а я достаточно уверен, что это так), укажите мне в правильном направлении, «КАК» это сделать, и какие ограничения я должен учитывать с указанным решением.
Что я сделал до сих пор:
AuthenticationType
с использованием только Windows Auth.Лучшее, что мне удалось сделать, - это подтвердить наличие HTTP-заголовка Kerberos, но мое тестовое приложение показывает, что пользовательский пользователь пула приложений (учетная запись SPN) передается вместо моего собственного. Вот результаты моего тестового приложения, если хотите:
Result Field Description Test App Code
------ ----------------- -------------
Negotiate Page Authentication Type Page.User.Identity.AuthenticationType
<dc>\<username> Page Identity Page.User.Identity.Name
Kerberos Principal Windows Auth Type WindowsIdentity.GetCurrent().AuthenticationType
<dc>\<spnUser> Principal Windows Identity WindowsIdentity.GetCurrent().Name
<dc>\<username> HttpContext User HttpContext.Current.User.Identity.Name
<dc>\<username> Server Var "LOGON_USER" Request.ServerVariables("LOGON_USER")
<dc>\<username> Thread Current Principal Threading.Thread.CurrentPrincipal.Identity.Name