【问题标题】:Give ASPNETDB.MDF SQL DB IIS_IUSRS Permissions授予 ASPNETDB.MDF SQL DB IIS_IUSRS 权限
【发布时间】:2012-01-28 19:54:49
【问题描述】:

在这种情况下已经变得很秃了!

我在 Windows 7 上使用 MS VS 2010 C# ASP.NET 和 MS SQL EXPRESS 2008、IIS 7。

我在页面上有 asp.net 登录控件。它在开发环境中运行得非常完美。

当我将站点移动到 IIS 时,会显示登录 aspx 页面,并且一切似乎都工作正常。一旦我输入我的登录凭据(已在 MS VS Dev 服务器中的同一数据库上测试过)并单击登录,我就会看到一个 IIS 错误,指出我没有权限。 (请查看堆栈跟踪)

我做了一些挖掘,并读到当 MSVS 为登录控件创建数据库时,它会授予当前用户权限。因此,当我们将它移动到我们的生产服务器(它不是真正的服务器,它只是在我们的一台 win 7 机器上测试的 IIS)并尝试通过互联网登录时,似乎 IIS_IUSRS 没有权限。

我尝试过的事情

1:从解决方案中分离数据库,在 SQL Server 管理器中附加它,并尝试在那里设置权限。根本无法识别 IIS_IUSRS 帐户。 (我也试过计算机名/IIS_IUSRS)。这可能是有道理的,因为 IIS_IUSRS 并不是真正的 Windows 帐户。我在尝试授予 NT AUTHORITY 权限时也遇到了同样的问题。

  1. 我在想如果我能以某种方式从 IIS_IUSRS 创建数据库,它会自动为我找出管道,但不知道从哪里开始,或者如果可能的话。

这是我用来连接数据库的连接字符串:

  <connectionStrings>
    <remove name="ApplicationServices"/>
    <add name="ApplicationServices" connectionString="data source=.\SQLEXPRESS;Integrated Security=True;AttachDBFilename=|DataDirectory|\aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient" />
  </connectionStrings>

非常感谢任何帮助,我已经被困了很长一段时间了。

【问题讨论】:

    标签: c# asp.net iis-7 permissions


    【解决方案1】:

    这可能有点具体,但肯定有一些解决方案可供其他人使用。这是我将我的 asp.net 网站从开发环境(MS VS 2010,SQLEXPRESS)移植到 IIS 7 时必须做的事情。

    这将解释如何在一个网站(Website1 和 Website2)下设置两个 Web 应用程序。 Website1 将使用 aspnetdb.mdf(由 Visual Studio 创建),Website2 将使用在 MS SQL Server 2008 中手动创建的 website2 数据库。为了便于操作,我们还将将 aspnetdb.mdf 移植到 sql server 2008。

    Website1 也将有权在 website2 上创建文件和目录。

    第 1 节 IIS 设置

    ****第 1 步:**** 在 wwwroot 中创建一个新文件夹来保存这两个应用程序(我们称之为网站) 为 website2 和 website1 复制粘贴“WebSites”文件夹。

    第 2 步: 网站 1 的应用程序池 如果尚未创建,请创建应用程序池并将其配置为使用 .NET 框架 4.0,集成管道模式,我们将其称为 asp4。

    网站 2 的应用程序池 目前为网站1使用应用程序池

    第 3 步:

    添加网站1 在 IIS MANAGER 中,添加新网站。将其物理目录指向我们刚刚复制到根目录下的新文件夹中的 website1(第 1 节,第 1 步)。 为 website1 选择应用程序池,请参阅第 1 节,第 2 步。 我们将站点名称设置为与物理目录(website1)相同。

    验证其他要求,第 2 节网站 1 数据库设置和 IIS 文件夹权限。

    添加网站2 在 IIS 管理器中,右键单击我们刚刚创建的新网站应用程序,选择“添加虚拟目录”。
    将我们复制到包含两个应用程序的 wwwroot 上的新文件夹中的 website2 文件夹的物理路径设置为,请参阅第 1 节,第 1 步。 转换为应用程序并为 website1 选择应用程序池,参见第 1 节,第 2 步。 我们将别名设置为与物理路径文件夹website1相同。

    目前,没有要通过的连接要求。 验证其他要求第 3 节 - website2 website2 的数据库设置

    第 2 节 website1 数据库设置和 IIS 文件夹权限

    步骤 1 aspnetdb.mdf 调整: 注意:从现在开始可能只使用最新的 aspnetdb.bak 文件。

    通过右键单击数据库并附加数据库,将 aspnetdb.mdf 附加到 ms sql server。

    第 2 步 - IIS 用户登录 如果未设置用户 - 第 4 节,第 1 步为 IIS 用户创建数据库登录

    如果权限未设置 - 第 4 节,第 2 步在 db 上为 IIS USER 设置权限

    代码调整/验证 需要在 web.config 中删除 MS VS 在连接字符串中自动生成的用户实例变量 (;User Instance=true)。

    -    <remove name="ApplicationServices"/>
    -          Not 100% neccessary but this will make it more scalable accross platforms
    -       In the web.config, make sure we are using the database we attached /        restored on MS SQL Server.
        -     "data source=.\SQLEXPRESS;Integrated Security=SSPI;initial catalog=aspnetdb" (because we renamed it aspnetdb)
    

    第 3 部分 - website2 为 website2 设置数据库

    确保数据库已在 MS SQL SERVER 上恢复 数据库要求

    第 1 步

    如果未设置用户 - 第 4 节,步骤 1 为 IIS 用户创建数据库登录

    第 2 步

    如果权限未设置 - 第 4 节,第 2 步在 db 上为 IIS USER 设置权限

    步骤 3 文件夹权限(添加子站点 website2 后)

    设置文件夹权限:由于 website1 写入文件并在 website2 中创建文件夹,(它设置为始终在 website2 文件夹的父文件夹中查找)我们需要给服务器 IIS_IUSRS ,我们的是 (IIS_IUSRS(MIKE71\IIS_IUSRS) 权限.

    在 IIS 中,右键单击嵌套应用程序网站 2 并选择编辑权限。确保为 IIS_IUSRS 勾选了修改和写入权限。

    第 4 节 - 将 IIS 用户添加到数据库并授予权限

    步骤 0 附加和恢复数据库

    • 如果数据库尚未附加到 MS SQL Server,我们需要附加 .mdf 文件。
    • 我们可以通过右键单击数据库来恢复数据库,恢复到我们的附加数据库,然后从提供的 .Bak 文件恢复。
    • 如果由于数据库定义(从头开始创建一个干净的定义)而无法恢复,请尝试: 恢复数据库 trimweb 从磁盘 = 'C:\trimweb.bak' 用替换

    第 1 步为 IIS USER 创建数据库登录

    为什么?需要创建并允许IIS APPOOL\asp4用户拥有数据库权限,设置为数据读取器(第一节第二步创建的应用程序池)

    如何:在MS SQL SERVER的安全部分,需要右击用户,添加IIS APPPOOL\asp4(IIS APPPOOL\apppoolname,在第一节第二步中创建)。 Add IIS 7 AppPool Identities as SQL Server Logons

    第 2 步在数据库上为 IIS USER 设置权限

    右键单击数据库名称 (website2 db),然后单击属性。在权限部分添加您刚刚在第 4 部分第 1 步中创建的 APPPOOL 用户,请务必授予他执行和选择权限。

    注意: Website1 也需要执行、选择、删除、插入权限。 Website2 也在使用这个不应该的应用程序池,因为我们不需要让用户在 trimdynamics 应用程序中拥有这种功能。我们可以分离应用程序池,以便我们的修剪动态 IIS USRS 仅获得执行和选择权限。

    【讨论】:

      【解决方案2】:

      在生产 IIS 服务器上使用 SQLEXPRESS UserInstance 连接字符串的整个想法充满了困难。您需要做的是将数据库附加到生产环境中的真实 SQL Server,并使用不带“UserInstance”指令的常规 SQL Server 连接字符串。这是我对 SQLEXPRESS 的不满,因为它会给“认为”您可以将本地开发环境移植到真实服务器的初级开发人员带来很多问题。几乎所有时间,你都做不到。

      【讨论】:

      • 我有 99% 的把握在过去使用 SQL EXPRESS 做到了这一点 :(
      • 问题根本不在于 SQL Express。所有问题都将包含在这两种环境中,无论是 SQLEXPRESS 还是 SQL Server。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-25
      • 2020-11-29
      • 2012-07-06
      • 2015-01-13
      • 2011-09-07
      相关资源
      最近更新 更多