我想将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
连接到数据库时查看该网页?
答案 0 :(得分:1)
请勿使用System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToString()
。这就是如何让应用程序池运行的当前用户,而不是登录用户。您可以通过启用模拟强制它们相同,但是当您使用集成安全性访问数据库时,它将使用模拟用户的帐户。你明确表示你不想要的。
Request.User.Identity.Name
(在Web窗体控件或页面中)或System.Web.HttpContext.Current.Request.User.Identity.Name
在其他地方(或从Web窗体上下文传递用户名)。