ASPX Windows身份验证而非

时间:2018-03-27 15:45:43

标签: c# asp.net sql-server iis

我想将SQL Server查询的结果提供给特定的一组用户,而不会让这些用户访问数据库本身。

查询数据库:

以下ASP.NET Web App代码(发布时)以IIS APPPOOL\DefaultAppPool成功连接到数据库并显示查询结果。

<asp:GridView runat="server" AutoGenerateColumns="true" ID="myGridView"/>

string connStr  = "Server=MyHost;Database=MyDb;Trusted_Connection=Yes;";
string queryStr = "SELECT Name, DateCreated FROM MyTable;";

SqlConnection sqlConn     = new SqlConnection(connStr);
SqlDataAdapter sqlAdapter = new SqlDataAdapter(queryStr, sqlConn);
DataSet ds = new DataSet();
sqlAdapter.Fill(ds);
myGridView.DataSource = ds.Tables[0];
myGridView.DataBind();

尝试进行身份验证: 我尝试在<authentication mode="Windows"/>中启用Windows身份验证web.config。我的目的是使用以下代码获取用户名并与我的已批准用户列表进行比较:

System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToString();

使用Windows身份验证,Web应用程序作为客户端用户运行,我可以验证该用户是否在我的列表中。但是,Web应用程序无法连接到数据库,因为该用户没有数据库权限。

问题:如何限制此网页,以便只有一组特定用户可以在IIS APPPOOL\DefaultAppPool连接到数据库时查看该网页?

1 个答案:

答案 0 :(得分:1)

请勿使用System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToString()。这就是如何让应用程序池运行的当前用户,而不是登录用户。您可以通过启用模拟强制它们相同,但是当您使用集成安全性访问数据库时,它将使用模拟用户的帐户。你明确表示你不想要的。

  • 启用Windows身份验证
  • 禁用模拟
  • 使用Request.User.Identity.Name(在Web窗体控件或页面中)或System.Web.HttpContext.Current.Request.User.Identity.Name在其他地方(或从Web窗体上下文传递用户名)。
  • 使用Integrated Security访问数据库。
相关问题