SqlRoleProvider无法连接到数据库

问题描述:

我有使用标准SqlRoleProvider角色下面的配置,但我得到一个错误,当我试图在wweb网站管理员工具打开安全页面:SqlRoleProvider无法连接到数据库

<roleManager enabled="true" defaultProvider="AspNetSqlRoleProvider"> 
    <providers> 
     <remove name="AspNetSqlRoleProvider"/> 
     <add name="AspNetSqlRoleProvider" 
      type="System.Web.Security.SqlRoleProvider" 
      connectionStringName="PoyntingInstallationConnectionString" 
      applicationName="/" /> 
    </providers> 
    </roleManager> 

的DB有所有角色表等。

+1

什么是错误? – Jeroen 2010-07-06 13:14:33

+0

@Jeroen,错误消息不是很有帮助:“无法连接到SQL Server数据库。” – ProfK 2010-07-06 13:42:17

+0

你确定你正在寻找正确的连接字符串吗? 第一个连接字符串是LocalSqlServer,它不出现在你的web.config中,但它在那里。那么你能告诉我如何从你的业务数据访问中获得连接字符串吗? – Jeroen 2010-07-06 13:52:38

确保PoyntingInstallationConnectionString位于您的web.config中,配置正确,并指向包含您的表的数据库。

这些角色将是aspnet_Roles表中的条目,而不是数据库角色中的条目。并且没有默认角色,所以当您第一次运行脚本时,该表应该是空的。

编辑:你能提供关于你如何创建auth数据库的更多细节吗?即您是直接运行aspnet_regsql工具,还是分别生成并运行脚本?

编辑2:aspnet_regsql工具很容易运行 - 它位于.NET Framework v2.0文件夹中。 (默认位置C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727)

有一堆参数可以用来从命令行运行,或者如果你运行它没有参数它会打开一个向导来指导你完成它。请注意,即使您不打算使用向导,您也可以获得对所有成员资格提供程序功能(配置文件,个性化设置,Web事件...)的支持。

我建议你运行它,然后将结果与现有数据库进行比较。有人运行该工具,然后只是将表复制到另一个数据库,却没有意识到还有一些其他需要的东西?我只是尝试从命令行和向导运行工具,并且它生成了所有角色,特效等。

当正确运行时,您应该有一堆表(至少6个),存储过程(几十个左右 - 我有35个)和数据库角色(至少6个),名称以aspnet_开头,以及一系列名称以vw_aspnet_开头的视图(至少5个)。如果你错过了这些的任何部分,提供者将无法工作。

我通常从命令行运行它,以便只获取成员资格和角色资料。这将减少噪音相当多,但也是为什么我的数字有点模糊。 :)

+0

连接对于标准业务数据访问正常工作。我今天看到的几个来源还谈到了数据库角色。不是为了Web授权,而是为了供应商本身。 – ProfK 2010-07-06 13:43:48

+1

@ProfK - 好的,我明白你在说什么了。是的,提供商需要一些数据库角色等。看我的编辑。 – GalacticCowboy 2010-07-06 13:58:24

+0

我的同事刚刚使用该工具而不生成脚本。 – ProfK 2010-07-06 14:32:44