Я пытаюсь зайти на свой веб-сайт в интрасети и заставить его выполнить простой SQL-запрос от имени пользователя Windows, в который я вошел как.
Когда я отлаживаю через Visual Studio, все отлично работает. Когда я захожу на веб-сервер, я получаю сообщение об ошибке от sqlconnection: «ОШИБКА: сбой входа для пользователя YOUR_DOMAIN \ YOUR_WEBSERVER_NAME».
Request.ServerVariables[AUTH_USER]: YOUR_DOMAIN\UserBob
System.Security.Principal.WindowsIdentity.GetCurrent().Name: NT AUTHORITY\NETWORK SERVICE
Page.User.Identity.Name: YOUR_DOMAIN\UserBob
System.Threading.Thread.CurrentPrincipal.Identity.Name: YOUR_DOMAIN\UserBob
Так как мне заставить SQL-запрос выполняться в UserBob?
Вот мои настройки:
<system.web>
<compilation debug="true" targetFramework="4.0"/>
<authentication mode="Windows"/>
<identity impersonate="true"/>
<customErrors mode="Off"/>
</system.web>
Веб-сервер - это сервер Win 2008 с IIS7, аутентификация Windows включена, аутентификация Anon выключена.
Код просто:
Response.Write("Request.ServerVariables[AUTH_USER]: " + Request.ServerVariables ["AUTH_USER"].ToString());
Response.Write("<br>System.Security.Principal.WindowsIdentity.GetCurrent().Name: " + System.Security.Principal.WindowsIdentity.GetCurrent().Name);
Response.Write("<br>Page.User.Identity.Name: " + Page.User.Identity.Name);
Response.Write("<br>System.Threading.Thread.CurrentPrincipal.Identity.Name: " + System.Threading.Thread.CurrentPrincipal.Identity.Name);
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["CarbonDB"].ConnectionString);
conn.Open();
SqlCommand sqlcom = new SqlCommand("dbo.runsomething", conn);
sqlcom.CommandType = CommandType.StoredProcedure;
SqlDataReader sqlDataReader = sqlcom.ExecuteReader();
conn.Close();