【问题标题】:Asp.net application pool and sql server data connectionasp.net应用程序池和sql server数据连接
【发布时间】:2011-03-18 14:44:02
【问题描述】:

我有一个在服务级别帐户下运行的自定义应用程序池上运行的 asp.net 应用程序。我在 web.config 中关闭了匿名访问。 Web 服务器是域的一部分。应用程序访问在同一台机器上运行的 sql server。

目前,对于所有用户,我都会模拟服务级别帐户来访问数据库。当大量用户访问该站点时,这会降低站点速度,因为 lsass 进程开始使用 cpu。

我不允许创建 sql server 帐户,我必须使用我所拥有的。 我也不允许将每个单独的用户添加到数据库并授予他们特定的访问权限。

我的问题是,如何设置我的应用程序和数据库关联,这样我就不必模拟服务级别帐户,从而避免在网站使用率高时 CPU 抖动。

【问题讨论】:

    标签: asp.net security impersonation


    【解决方案1】:

    您不必冒充服务帐号。服务帐户是需要访问数据库的帐户,我想它已经有了。当您访问数据库时,您是否已经尝试过在不模拟服务帐户的情况下运行您的应用程序?这应该可以。

    要执行一个简单的测试,请检查WindowsIdentity.GetCurrent() 返回的身份(例如在Page_Load 内部)。这应该返回应用程序池标识,这是将用于访问数据库的标识。

    当然,这仅适用于您没有在 Web.config 文件中配置 client impersonation 的情况。但由于这不是一般做法,除了一些极端情况,我想你不使用它。客户端模拟对于确定当前用户是谁不是必需的,您应该只在您想要使用当前登录用户的身份访问第三方系统(数据库、文件共享、队列......)时使用它(其中不是一种非常可扩展的方法)。

    【讨论】:

    • 客户端模拟实际上是在web.config文件中配置的。 impersonate=true,没有用户名和密码。这样做是为了弄清楚用户是谁,因为我需要确保他们首先被允许访问该网站。
    • 您不需要模拟客户。我想你有一个 Intranet 站点和 Windows 身份验证?然后通过调用 Thread.CurrentPrincipal 或 HttpContext.Current.User 来检查您当前的用户是谁。我还在回答中添加了更多信息。
    • 从 web.config 文件中取出模拟解决了这个问题。现在我不必以编程方式模拟。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 2018-09-03
    相关资源
    最近更新 更多