【问题标题】:ASPX Windows Authentication and NotASPX Windows 身份验证而不是
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2019-09-27
    • 1970-01-01
    • 1970-01-01
    • 2010-10-05
    • 2013-10-30
    • 2012-03-15
    • 1970-01-01
    • 1970-01-01
    • 2015-10-12
    相关资源
    最近更新 更多