ASP.NET + MySQL 开发笔记 MembershipProvider 和 RoleProvider 用法

以前使用一个老外写的 MembershipProvider 和 RoleProvider,  是从 codeproject.com 网站上找到的, 用起来感觉还不错.  但是没有实现用户的个性化引擎, 即不支持Profile. 采用的 MySql .Net 连接器是 5.0.6

现在采用 MySql .Net 连接器是 5.2.2 , 其中已经包含了用户提供程序和角色提供程序. 

配置当中的注意事项:

1.  将 MySql.Data.dll  和 MySql.Web.dll  拷贝到 网站的 Bin 目录下.  MySql.Web.dll  是 角色提供程序必要的组件.

2.  配置 Web.config

例如:  在 System.Web 节内配置如下

  用户管理提供程序

  <membership defaultProvider="MySqlMembershipProvider">
   <providers>
    <clear />
    <add autogenerateschema="true" connectionStringName="AppDBConnString"
     enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true"
     applicationName="MySite" requiresUniqueEmail="true" passwordFormat="Hashed"
     maxInvalidPasswordAttempts="5" minRequiredPasswordLength="1"
     minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
     passwordStrengthRegularExpression="" description="MySQL AB Membership Provider"
     name="MySqlMembershipProvider" type="MySql.Web.Security.MySqlMembershipProvider" />
   </providers>
  </membership>

角色提供程序

   <roleManager enabled="true" cacheRolesInCookie="true" cookieName=".ASPROLES"
   defaultProvider="MySqlRoleProvider">
   <providers>
    <clear />
    <add connectionStringName="AppDBConnString" applicationName="MySite"
     writeExceptionsToEventLog="false" name="MySqlRoleProvider" type="MySql.Web.Security.MySqlRoleProvider" />
   </providers>
  </roleManager>

  解释:

(1)  connectionStringName="AppDBConnString"  放置的是 MySQL 数据库的链接字符串设置

(2)  autogenerateschema="true"  设置为 true 时, 当在 VS  当中选择"网站"菜单进行配置时,  会自动生成相关的数据表(共7个).

(3)  applicationName="MySite"   是应用程序的标识,  如果你在一台计算机上有多个网站, 这个标识不能重复, 否则提供程序将会出错

3.  配置成功后, 可以将 MySQL 自动生成的用户及角色管理表导出来, 生成 SQL 语句,  以便于整个系统的每日构建.  这时就可以将 autogenerateschema 设置成 false.   可以采用 MySql Query Browser 将名称以 my_asp_  开始的几个表导出为 Create 形式的 Sql 语句. 需要注意的有一点, 就是 my_aspnet_schemaversion 表中必须有一条记录, 此表仅有一个字段 version , 其值为 3.  没有此条记录, 则提供程序会报错.

也可以将以下的 sql 语句保存为 sql 文件, 采用 source 语句执行它, 为 MySQL 加上这些相关的表:

/*
    MySql 官方 Memeber 及 Role 服务提供程序所使用的数据库结构
*/

DROP TABLE IF EXISTS `cfh2008`.`my_aspnet_applications`;
CREATE TABLE  `cfh2008`.`my_aspnet_applications` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(256) default NULL,
  `description` varchar(256) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `cfh2008`.`my_aspnet_membership`;
CREATE TABLE  `cfh2008`.`my_aspnet_membership` (
  `userId` int(11) NOT NULL default '0',
  `Email` varchar(128) default NULL,
  `Comment` varchar(255) default NULL,
  `Password` varchar(128) NOT NULL,
  `PasswordKey` char(32) default NULL,
  `PasswordFormat` tinyint(4) default NULL,
  `PasswordQuestion` varchar(255) default NULL,
  `PasswordAnswer` varchar(255) default NULL,
  `IsApproved` tinyint(1) default NULL,
  `LastActivityDate` datetime default NULL,
  `LastLoginDate` datetime default NULL,
  `LastPasswordChangedDate` datetime default NULL,
  `CreationDate` datetime default NULL,
  `IsLockedOut` tinyint(1) default NULL,
  `LastLockedOutDate` datetime default NULL,
  `FailedPasswordAttemptCount` int(10) unsigned default NULL,
  `FailedPasswordAttemptWindowStart` datetime default NULL,
  `FailedPasswordAnswerAttemptCount` int(10) unsigned default NULL,
  `FailedPasswordAnswerAttemptWindowStart` datetime default NULL,
  PRIMARY KEY  (`userId`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='2';

DROP TABLE IF EXISTS `cfh2008`.`my_aspnet_profiles`;
CREATE TABLE  `cfh2008`.`my_aspnet_profiles` (
  `userId` int(11) NOT NULL,
  `valueindex` longtext,
  `stringdata` longtext,
  `binarydata` longblob,
  `lastUpdatedDate` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  PRIMARY KEY  (`userId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `cfh2008`.`my_aspnet_roles`;
CREATE TABLE  `cfh2008`.`my_aspnet_roles` (
  `id` int(11) NOT NULL auto_increment,
  `applicationId` int(11) NOT NULL,
  `name` varchar(255) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC;

DROP TABLE IF EXISTS `cfh2008`.`my_aspnet_schemaversion`;
CREATE TABLE  `cfh2008`.`my_aspnet_schemaversion` (
  `version` int(11) default NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `cfh2008`.`my_aspnet_users`;
CREATE TABLE  `cfh2008`.`my_aspnet_users` (
  `id` int(11) NOT NULL auto_increment,
  `applicationId` int(11) NOT NULL,
  `name` varchar(256) NOT NULL,
  `isAnonymous` tinyint(1) NOT NULL default '1',
  `lastActivityDate` datetime default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `cfh2008`.`my_aspnet_usersinroles`;
CREATE TABLE  `cfh2008`.`my_aspnet_usersinroles` (
  `userId` int(11) NOT NULL default '0',
  `roleId` int(11) NOT NULL default '0',
  PRIMARY KEY  (`userId`,`roleId`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC;

use cfh2008;
insert into my_aspnet_schemaversion (version) values (3);

原文地址:https://www.cnblogs.com/chinaontology/p/1269879.html