ASP.NET MVC角色认证误用SQL Server Express,如何指定目标SQL Server?
解决ASP.NET角色认证使用指定数据库连接字符串的问题
问题描述
我的web.config连接字符串配置如下:
<configuration> <connectionStrings> <add name="DefaultConnection" connectionString="Data Source=DESKTOP-6HOPM3U;Initial Catalog=DatabaseName;Integrated Security=True;Connect Timeout=15;" providerName="System.Data.SqlClient" /> </connectionStrings> </configuration>
在_Layout.cshtml中添加角色判断代码前,项目运行正常:
@if(User.IsInRole("Admin")) { <li>@Html.ActionLink("Admin Menu","Index","Main",new{ area = "Admin"},null)</li> }
添加代码后,系统抛出连接错误,提示尝试自动创建SQLExpress数据库。移除这段代码后项目恢复正常,但无法使用角色权限功能。我并未使用SQL Server Express,需要配置让角色认证模块使用指定的数据库连接字符串。
解决方案
- 配置角色与成员资格提供器
在web.config的<system.web>节点下添加以下配置,明确指定角色认证使用已定义的DefaultConnection连接字符串:
<system.web> <!-- 保留原有system.web下的配置,比如authentication、compilation等 --> <membership defaultProvider="AspNetSqlMembershipProvider"> <providers> <clear/> <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" /> </providers> </membership> <roleManager enabled="true" defaultProvider="AspNetSqlRoleProvider"> <providers> <clear/> <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="DefaultConnection" applicationName="/" /> </providers> </roleManager> </system.web>
注意这里的connectionStringName必须和<connectionStrings>中定义的连接字符串名称完全一致。
- 生成角色认证所需的数据库对象
如果目标数据库中还没有ASP.NET角色认证相关的表和存储过程,需要使用aspnet_regsql.exe工具生成。打开命令提示符,导航到.NET Framework安装目录(通常是C:\Windows\Microsoft.NET\Framework\<版本号>),执行以下命令:
aspnet_regsql.exe -S DESKTOP-6HOPM3U -d DatabaseName -A r
参数说明:
-S:对应连接字符串中的Data Source,指定数据库服务器名称-d:对应连接字符串中的Initial Catalog,指定目标数据库名称-A r:表示仅添加角色服务相关的数据库对象验证配置
确保web.config中没有其他冲突的角色提供器配置,且所有引用的连接字符串名称正确无误。重启项目后,角色认证模块就会使用你指定的数据库,不再尝试创建SQLExpress数据库。
内容的提问来源于stack exchange,提问作者Miranda
相关产品推荐
相关产品推荐

