我正在尝试访问我的Intranet网站并让它运行一个简单的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
那么如何在UserBob下执行SQL查询?
这是我的设置:
<system.web>
<compilation debug="true" targetFramework="4.0"/>
<authentication mode="Windows"/>
<identity impersonate="true"/>
<customErrors mode="Off"/>
</system.web>
Webserver是Win 2008服务器,带有IIS7,Windows身份验证,Anon Auth关闭。
代码很简单:
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();
答案 0 :(得分:1)
SQL Server与Web服务器位于不同的计算机上吗?
如果是这样,您遇到的问题与Kerberos委派相关。基本上,您的Web服务器没有权限/能力将最终用户模拟到另一台服务器。
Try this link for more information on delegation.
请注意,这并非易事,需要网络管理员的帮助,因为它涉及对Active Directory环境进行更改。
如果可能,请使用服务帐户(如网络服务)访问SQL Server。
埃里克
答案 1 :(得分:0)
网站是使用集成还是经典管道模式。在IIS7中,检查网站的基本设置,单击 Connect As ... 并确保选中应用程序用户(传递身份验证)。