ASP.NET + MySQL 开发笔记 - MembershipProvider 和 RoleProvider 用法
2008-08-17 18:58
671 查看
以前使用一个老外写的 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);
现在采用 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);
相关文章推荐
- ASP.NET + MySQL 开发笔记 - MembershipProvider 和 RoleProvider 用法
- Asp.Net + MySql 开发笔记 第一回:乱码
- Asp.Net+MySql开发笔记:乱码
- 《纵向切入ASP.NET 3.5控件和组件开发技术》笔记:高效率事件集合对象
- ASP.NET 2.0 + XML留言本开发笔记(一)
- asp.net中Repeater控件用法笔记
- Asp.net控件开发学习笔记(十二)----数据绑定
- ASP.Net MVC开发基础学习笔记:三、Razor视图引擎、控制器与路由机制学习
- [开发笔记]-ASP.NET项目在IIS上使用虚拟目录
- ASP.Net MVC开发基础学习笔记:一、走向MVC模式
- Asp.net控件开发学习笔记(十一)----服务器控件模板
- ASP.Net MVC开发基础学习笔记
- Asp.net控件开发学习笔记(三)-控件开发基础
- Asp.net控件开发学习笔记(三)-控件开发基础
- ASP.NET控件开发学习笔记--第一回 HelloWorld
- [ASP.NET学习笔记之三十三]开发高性能的Web Service应用
- ASP.Net MVC开发基础学习笔记(2):HtmlHelper与扩展方法
- 张高兴的 Windows 10 IoT 开发笔记:部署 ASP.NET Core 2 应用
- ASP.NET 开发笔记1
- Asp.net控件开发学习笔记(八)----服务器控件事件