【发布时间】:2018-09-06 02:53:59
【问题描述】:
我想将 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();
尝试验证:
我尝试启用 Windows 身份验证(web.config 中的<authentication mode="Windows"/>。我的目的是使用以下代码获取用户名并与我的批准用户列表进行比较:
System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToString();
使用 Windows 身份验证,Web 应用程序作为客户端用户运行,我可以验证该用户是否在我的列表中。但是,Web 应用无法连接到数据库,因为该用户没有数据库权限。
问题:如何限制此网页,以便只有特定的一组用户可以查看它,同时仍以IIS APPPOOL\DefaultAppPool 连接到数据库?
【问题讨论】:
-
你在使用模拟吗?
-
是的。对于 Windows 身份验证,我的 web.config 也有
<identity impersonate="true"/>。 -
为什么你有这个?如果您将模拟与使用集成安全性的连接字符串一起使用,那么它将使用用户的身份来访问您不想要的数据库。
-
我希望 Windows 身份验证来确定访问页面的用户。如果用户在我的列表中,那么页面将查询数据库,为
IIS APPPOOL\DefaultAppPool。 -
是的,但您不需要为此进行模拟。模仿恰恰相反。
标签: c# asp.net sql-server iis