今天在使用asp.net 2005中的 Login控件時,用到了Asp.net web site 管理工具 。在進行用戶管理時,Security頁面總是提示連不到Sql ,在網上翻了個把小時後,終於解決,下面就帖出原文。
1.将ASP.NET中的membership应用到sqlserver2000/sqlserver2005中
默认情况下membership在安装了 Sql Server Express 的情况下才能用,但是在多情况下我们的项目中已经有了自己的数据库,可能在sqlserver2000或者sqlserver2005,这时我们应当如何来使用membership所提供的功能呢?
这个时候,就要手动地进行MemberShip的配置工作了。利用aspnet_regsql.exe这个工具就可以。
首先,打开“Visual Studio 2005 命令提示”(在VS2005菜单里面的Visual Studio Tools里面能找到),运行aspnet_regsql.exe这个工具。然后按照屏幕提示,初始化数据库。
打开asp.net sqlserver安装向导:
如上图,配置好您的数据库服务器与数据库。
OK,打开数据库看下,如下图所示,已经安装了membership所需要的表:
完成数据库的初始化工作之后,就需要对Web.Config进行相应配置。
2.Web.Config 文件配制 (重點)
<connectionStrings>
<add name="constrU" connectionString="server=.;database=aspnetdb;uid=sa;pwd=sa" providerName="System.Data.SqlClient" />
</connectionStrings>
<system.web>
<membership defaultProvider="AspNetSqlMP">
<providers>
<add name="AspNetSqlMP"
type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="constrU"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="true"
applicationName="/"
requiresUniqueEmail="false"
passwordFormat="Hashed"
maxInvalidPasswordAttempts="5"
minRequiredPasswordLength="6"
minRequiredNonalphanumericCharacters="0"
passwordAttemptWindow="10"
passwordStrengthRegularExpression="" />
</providers>
</membership>
<system.web>
<!--
connectionStringName 数据库连接。这个要在web.config设置
enablePasswordRetrieval 获得一个值,指示当前成员资格提供程序是否配置为允许用户检索其密码。
enablePasswordReset 获得一个值,指示当前成员资格提供程序是否配置为允许用户重置其密码。
requiresQuestionAndAnswer 获取一个值,该值指示默认成员资格提供程序是否要求用户在进行密码重置和检索时回答密码提示问题。
applicationName 获取或设置应用程序的名称。
requiresUniqueEmail 指示用户在创建用户时是否必须提供唯一的电子邮件地址值。
passwordFormat 指示在成员资格数据存储区中存储密码的格式。下面有详细说明
maxInvalidPasswordAttempts 获取锁定成员资格用户前允许的无效密码或无效密码提示问题答案尝试次数。
minRequiredPasswordLength 获取密码所要求的最小长度。
minRequiredNonalphanumericCharacters 获取有效密码中必须包含的最少特殊字符数。
passwordAttemptWindow 获取在锁定成员资格用户之前允许的最大无效密码或无效密码提示问题答案尝试次数的分钟数。
对PasswordFormat 的详细说明
属性指示存储密码的格式。密码可以采用 Clear、Encrypted 和 Hashed 密码格式存储。Clear 密码以明文形式存储,这可以提高存储和检索密码的性能,但安全性较差,当数据源安全性受到威胁时此类密码很容易被读取。Encrypted 密码在存储时进行了加密,可以在比较或检索密码时进行解密。此类密码在存储和检索时需要进行额外的处理,但比较安全,在数据源的安全性受到威胁时不容易被获取。Hashed 密码在存储到数据库时使用单向哈希算法和随机生成的 salt 值进行哈希处理。在验证某一密码时,将用数据库中的 salt 值对该密码进行哈希计算以进行验证。无法检索哈希密码。
-->
<membership>
<providers>
<clear/>
<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="conn"
enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
applicationName="/" />
</providers>
</membership>
<profile>
<providers>
<clear/>
<add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="conn" applicationName="/" />
</providers>
</profile>
<roleManager enabled="true" >
<providers>
<clear/>
<add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="conn" applicationName="/" />
<add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
</providers>
</roleManager>