通过ASP.NET网站管理员工具获得Asp.Net会员资格

时间:2010-03-11 08:36:11

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

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

我收到了一个错误:

  

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

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

更新
也许这是因为我使用的是SQL Server 2008并且没有表达?

更新2:

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

遇到错误。请返回上一页,然后重试。

  

以下消息可能对您有所帮助   诊断问题:无法解决   连接到SQL Server数据库。在   System.Web.Administration.WebAdminPage.CallWebAdminHelperMethod(布尔   isMembership,String methodName,   Object []参数,类型[]   paramTypes)at   ASP.security_wizard_wizardpermission_ascx.OnInit(EventArgs的   吃   System.Web.UI.Control.InitRecursive(控制   namingContainer)at   System.Web.UI.Control.InitRecursive(控制   namingContainer)at   System.Web.UI.Control.InitRecursive(控制   namingContainer)at   System.Web.UI.Control.InitRecursive(控制   namingContainer)at   System.Web.UI.Control.InitRecursive(控制   namingContainer)at   System.Web.UI.Page.ProcessRequestMain(布尔   includeStagesBeforeAsyncPoint,Boolean   includeStagesAfterAsyncPoint)

4 个答案:

答案 0 :(得分:5)

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

在web.config中查看,您可能会在<membership>元素中看到类似的内容:

<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属性告诉框架在<connectionStrings>元素中查找名为“LocalSqlServer”的连接字符串 - 这可能没有在web.config中定义,因为它可以从机器继承.Config在.Net Frameworks核心配置目录中。

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

然后在<connectionStrings>元素中有以下内容:

<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. 如果您使用的是集成安全性,则需要确保您已根据数据库中的相应权限为您的站点提供运行帐户:您应该发现您的数据库中包含许多角色,从{{ 1}},为了确保您可以创建用户(如果您有注册表单,则需要创建用户),您应该将帐户添加到aspnet_角色(会员,个性化,个人资料和角色各一个)。

答案 1 :(得分:0)

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

sp_configure 'user instances enabled','1'

执行此操作,然后输入

reconfigure 

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

答案 2 :(得分:0)

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

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实用程序将打开向导,如下所示。

enter image description here

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

第2步:

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

enter image description here

第3步

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

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

enter image description here

第4步:

选择“下一步”按钮并确认您的设置是否正确以进一步安装(如下图所示)并选择“下一步”按钮。

enter image description here

第5步

在成功安装ASP.NET应用程序服务数据库后,选择上面窗口中的“下一步”按钮将转到确认窗口,如下所示。最后按“完成”。

enter image description here

第6步

您将看到已安装的ASPNET Services数据库已准备好在您的ASP.NET应用程序中使用 enter image description here

答案 3 :(得分:0)

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

我在这里猜测,但我认为是AspNetSqlRoleProvider的web.config中的另一个提供程序,并为其提供了一个连接字符串,该字符串指向具有访问角色的用户的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中使用<identity impersonate="true" userName="windowsUser" password="winUsrPassword" />在哪种情况下,您的Windows用户需要这些属性。