【问题标题】:Asp.Net membership via ASP.NET Website Administrator Tool通过 ASP.NET 网站管理员工具获得 Asp.Net 会员资格
【发布时间】:2011-01-26 06:45:34
【问题描述】:

我使用 aspnet_regsql 创建了一个数据库,该数据库是在 sql sever 2008 中创建的,而不是在我的项目的数据文件夹中(我需要手动将其移动到该文件夹​​吗?)。
接下来,在网站管理工具中,我转到提供程序部分并单击不测试按钮。

我遇到了一个错误:

无法建立连接到 数据库。如果你还没有 创建 SQL Server 数据库,退出 网站管理工具,使用 aspnet_regsql 命令行实用程序 创建和配置数据库, 然后返回此工具进行设置 提供者。

也许我需要在 web.config 中设置一些东西,比如成员资格设置或连接字符串(或者 ASP.NET 网站管理员工具应该为我创建这些设置)?

更新:
也许是因为我使用的是完整的 SQL Server 2008 而不是 Express?

更新 2:

在网站管理工具中将成员资格部分和连接字符串设置为我的 aspnetdb 数据库后,我打开了安全性->安全设置向导->定义角色(第 4 阶段)我收到此错误:

遇到错误。请返回上一页并重试。

以下消息可能有助于 诊断问题:无法 连接到 SQL Server 数据库。在 System.Web.Administration.WebAdminPage.CallWebAdminHelperMethod(布尔值 isMembership,字符串方法名, 对象[] 参数,类型[] 参数类型)在 ASP.security_wizard_wizardpermission_ascx.OnInit(EventArgs 吃 System.Web.UI.Control.InitRecursive(控制 命名容器)在 System.Web.UI.Control.InitRecursive(控制 命名容器)在 System.Web.UI.Control.InitRecursive(控制 命名容器)在 System.Web.UI.Control.InitRecursive(控制 命名容器)在 System.Web.UI.Control.InitRecursive(控制 命名容器)在 System.Web.UI.Page.ProcessRequestMain(布尔值 includeStagesBeforeAsyncPoint,布尔值 includeStagesAfterAsyncPoint)

【问题讨论】:

    标签: asp.net sql-server-2008 asp.net-membership


    【解决方案1】:

    我遇到过类似的问题,因为这是我第一次使用 asp.net 会员。如果您设置<roleManager Enabled="False" />,您将能够创建用户。

    我在这里猜测,但我认为在 web.config 中为 AspNetSqlRoleProvider 提供了一个附加提供程序,并为其提供了一个连接字符串,该连接字符串指向 asp 服务数据库,用户设置为访问角色管理信息在 SQL 端(查看“此用户拥有的模式”和“数据库角色成员资格”的 sql 用户属性)将允许该工具正确进入数据库。

    您是在 SQL Server 上使用 Windows 身份验证还是 SQL 身份验证?

    PS-

    我阅读和理解 Zhaph 的答案越多,我就越喜欢它。他提供了一个指向 AspNetSqlRoleProvider 元素的 msdn 架构的链接(不要被微软说该文档不存在而愚弄,只需从“其他版本”下拉菜单中选择一个合适的版本即可)。

    更新 在实际测试我正在编写的内容之前,我在这里发布了一件坏事,但我确实遵循并将以下内容添加到 web.config 允许我继续编辑用户和添加/管理角色。

    <roleManager enabled="true">
      <providers>
        <clear/>
        <add name="AspNetSqlRoleProvider"
             type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
             connectionStringName="MyConnectionString"/>
      </providers>
    </roleManager>
    

    正如我之前提到的,在我的连接字符串中指定的用户需要 aspnet_Roles_...Access 属性以及 aspnet_Membership_...Access,除非您使用 integrated security=true 和 &lt;identity impersonate="true" userName="windowsUser" password="winUsrPassword" /&gt; 在这种情况下您的 Windows用户需要这些属性。

    【讨论】:

      【解决方案2】:

      按照以下步骤将会员资格正确集成到您的网站(如果您看到上述错误,例如

      “Could not establish a connection to the database. If you have not yet created the SQL Server database, exit the Web Site Administration tool, use the aspnet_regsql command-line utility to create and configure the database, and then return to this tool to set the provider.”)。

      第 1 步:

      从您计算机上的 C:\windows\Microsoft.NET\Framework\v2.0.50727 文件夹中运行 aspnet_regsql.exe 实用程序。选择或双击 aspnet_regsql.exe 实用程序将打开如下向导。

      在上面的窗口中选择“下一步”按钮将打开下一个窗口,您可以在其中为应用程序服务配置 SQL Server 或从现有数据库中删除应用程序服务信息。

      第 2 步:

      选择为应用程序服务配置 SQL Server 单选按钮以安装新数据库并选择下一步按钮。

      第 3 步

      输入您的 SQL Express 服务器名称,如下所示。请注意,您可以将应用程序服务数据库名称更改为您想要的名称(默认为aspnetdb)。(或)您可以选择Sql Server身份验证(需要用户名,密码,相应的数据库名称)

      请注意,我将数据库命名为 ASPNETServices

      第 4 步:

      选择下一步按钮并确认您的设置正确以继续安装(如下图所示),然后选择下一步按钮。

      第 5 步

      在成功安装适用于 ASP.NET 的应用程序服务数据库后,在上面的窗口中选择下一步按钮,您将进入如下确认窗口。最后按完成。

      第 6 步

      您将看到已安装的 ASPNET 服务数据库可以在您的 ASP.NET 应用程序中使用

      【讨论】:

        【解决方案3】:

        是的,您需要在 web.config 中修改连接字符串。

        查看 web.config,您可能会在 &lt;membership&gt; 元素中看到类似的内容:

        <membership>
          <providers>
            <clear />
            <add connectionStringName="LocalSqlServer" 
                 name="AspNetSqlMembershipProvider"
                 [...]
                 type="System.Web.Security.SqlMembershipProvider, 
                       System.Web, 
                       Version=2.0.0.0,
                       Culture=neutral,
                       PublicKeyToken=b03f5f7f11d50a3a" />
          </providers>
        </membership>
        

        connectionStringName 属性告诉框架在您的&lt;connectionStrings&gt; 元素中查找名为“LocalSqlServer”的连接字符串 - 这可能未在您的 web.config 中定义,因为它可以从.Net Frameworks 核心配置目录。

        您可能应该为连接字符串选择一个新名称,并更新您的成员资格、角色和个人资料(如果您正在使用它们)提供商以使用新名称。

        然后在&lt;connectionStrings&gt; 元素中有以下内容:

        <connectionStrings>
          <remove name="LocalSqlServer" />
          <add name="MyConnectionString"
               connectionString="Data Source=[ServerName];Initial Catalog=[DatabaseName];Integrated Security=True"
               providerName="System.Data.SqlClient" />
        </connectionStrings>
        

        调整值以适合您的系统 - 我建议集成安全性而不是将数据库登录名和密码存储在 web.config 中,但是 YMMV(例如,在我的共享主机上,我不能使用集成安全性,所以必须提供用户/通行证详细信息)。

        网站管理工具也会使用这些连接字符串。

        编辑以回复评论

        您是否已成功登录?还是创建了用户?我只是想排除您是否配置了连接字符串并且可以正常工作?

        您是否也配置并打开了角色提供程序?你更新了里面的“connectionStringName”属性了吗?

        请注意,与以前一样,machine.config 为您指定了一个默认角色提供程序,它尝试指向本地 SqlExpress 实例 - 这可能是连接错误的来源。

        <!-- Note enabled="true" - you need to turn this one on! -->
        <roleManager enabled="true">
          <providers>
            <clear />
            <add connectionStringName="MyConnectionString"
                 [...]
                 type="System.Web.Security.SqlRoleProvider, 
                       System.Web,
                       Version=2.0.0.0,
                       Culture=neutral,
                       PublicKeyToken=b03f5f7f11d50a3a" />
          </providers>
        </roleManager>
        

        有关省略的属性的更多详细信息,我推荐文档:

        一旦你配置好了,它应该就可以工作了。

        如果您无法创建用户/登录,我会检查:

        1. 连接字符串 - 确保名称匹配,确保 data source 匹配您的服务器实例(不总是您的机器名称,它可能类似于“MachineName\SqlServer”)。
        2. 如果您使用集成安全性,您需要确保您的网站在数据库中以适当的权限运行的帐户:您应该发现您的数据库中有许多以@987654331 开头的角色@,为确保您可以创建用户(如果您有注册表单则需要),您应该将该帐户添加到 aspnet_XXXX_FullAccess 角色(成员资格、个性化、个人资料和角色各一个)。

        【讨论】:

        • 我在 web.config 中没有 部分,所以我手动创建了它,它可以工作。现在我的问题是:1)是否有一个选项可以在 web.config 中自动生成 设置,或者只能手动生成? 2)我可以在sql server 2008完整的本地数据库文件中使用数据文件夹吗?
        • 抱歉没及时回复,一整天都在开会。
        【解决方案4】:

        打开sql management studio,打开master数据库,新建查询并输入

        sp_configure 'user instances enabled','1'
        

        执行这个,然后输入

        reconfigure 
        

        并执行此操作以使更改生效。有关 sp_configure 的更多信息,您可以阅读http://msdn2.microsoft.com/en-us/library/ms188787.aspx,如果您希望列出所有配置,然后不带任何参数执行 sp_configure。

        【讨论】:

        • 我收到错误:配置选项“启用用户实例”不存在,或者它可能是高级选项。
        • 你使用的是什么版本的Sql server?以上仅适用于特快版。
        • 请查看我添加的更新... SQL Server 2008 完整版...如何使用完整版?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-13
        • 1970-01-01
        • 1970-01-01
        • 2012-03-06
        • 1970-01-01
        相关资源
        最近更新 更多