Click here to Skip to main content
Licence 
First Posted 16 Nov 2005
Views 473,225
Downloads 3,229
Bookmarked 171 times

Membership and Role providers for MySQL

By Rakotomalala Andriniaina | 20 Dec 2005
This article provides two files that contain a Membership Provider and a Role Provider for ASP.NET v2.0.
 
Part of The SQL Zone sponsored by
See Also
1 vote, 1.5%
1
1 vote, 1.5%
2
1 vote, 1.5%
3
7 votes, 10.6%
4
56 votes, 84.8%
5
4.86/5 - 66 votes
3 removed
μ 4.60, σa 1.23 [?]

Introduction

This article provides two files that contain a Membership provider and a Role provider for ASP.NET v2.0.

Microsoft provides a Membership provider in the framework but only for SQL Server. The class does not seem to work for MySQL so I decided to write a new provider from the ODBC provider sample code included in the framework SDK.

How to use it

To use these classes, you will need the latest MySQL .NET Connector. You might need to recompile it with the new C# compiler for v2.0 (but the new framework should normally support v1.0 or 1.1 assemblies).

  1. Create the tables (note that these SQL commands might not work with MySQL 4).
    CREATE TABLE Roles
    (
      Rolename Varchar (255) NOT NULL,
      ApplicationName varchar (255) NOT NULL
    )
    
    CREATE TABLE UsersInRoles
    (
      Username Varchar (255) NOT NULL,
      Rolename Varchar (255) NOT NULL,
      ApplicationName Text (255) NOT NULL
    )
    ALTER TABLE 'usersinroles' 
          ADD INDEX ( 'Username', 'Rolename', 'ApplicationName') ;
    ALTER TABLE 'roles' ADD INDEX ( 'Rolename' , 'ApplicationName' ) ;
    
    CREATE TABLE 'users' (
      'PKID' varchar(36) collate latin1_general_ci NOT NULL default '',
      'Username' varchar(255) collate latin1_general_ci NOT NULL default '',
      'ApplicationName' varchar(100) 
                        collate latin1_general_ci NOT NULL default '',
      'Email' varchar(100) collate latin1_general_ci NOT NULL default '',
      'Comment' varchar(255) collate latin1_general_ci default NULL,
      'Password' varchar(128) collate latin1_general_ci NOT NULL default '',
      'PasswordQuestion' varchar(255) collate latin1_general_ci default NULL,
      'PasswordAnswer' varchar(255) collate latin1_general_ci default NULL,
      'IsApproved' tinyint(1) default NULL,
      'LastActivityDate' datetime default NULL,
      'LastLoginDate' datetime default NULL,
      'LastPasswordChangedDate' datetime default NULL,
      'CreationDate' datetime default NULL,
      'IsOnLine' tinyint(1) default NULL,
      'IsLockedOut' tinyint(1) default NULL,
      'LastLockedOutDate' datetime default NULL,
      'FailedPasswordAttemptCount' int(11) default NULL,
      'FailedPasswordAttemptWindowStart' datetime default NULL,
      'FailedPasswordAnswerAttemptCount' int(11) default NULL,
      'FailedPasswordAnswerAttemptWindowStart' datetime default NULL,
      PRIMARY KEY  ('PKID')
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
  2. Change MySqlMembershipProvider::encryptionKey to a random hexadecimal value of your choice.
  3. Upload the two files to ~/App_Code.
  4. Modify your web.config using the following template (if you are on a shared hosting server, you will have to set writeExceptionsToEventLog to false):
    <connectionStrings>
        <add name="ConnString" 
          connectionString="Database=YOURDBNAME;Data Source=localhost;
                            User Id=YOURUSERNAME;Password=YOURPWD" />
    </connectionStrings>
    <system.web>
        <roleManager defaultProvider="MySqlRoleProvider"
            enabled="true"
            cacheRolesInCookie="true"
            cookieName=".ASPROLES"
            cookieTimeout="30"
            cookiePath="/"
            cookieRequireSSL="false"
            cookieSlidingExpiration="true"
            cookieProtection="All" >
        <providers>
            <clear />
            <add
                name="MySqlRoleProvider"
                type="Andri.Web.MySqlRoleProvider"
                connectionStringName="ConnString"
                applicationName="YOURAPPNAME"
                writeExceptionsToEventLog="true"
            />
        </providers>
        </roleManager>
        
        <membership defaultProvider="MySqlMembershipProvider" 
                    userIsOnlineTimeWindow="15">
            <providers>
                <clear />
                <add
                    name="MySqlMembershipProvider"
                    type="Andri.Web.MySqlMembershipProvider"
                    connectionStringName="ConnString"
                    applicationName="YOURAPPNAME"
                    enablePasswordRetrieval="false"
                    enablePasswordReset="true"
                    requiresQuestionAndAnswer="true"
                    requiresUniqueEmail="true"
                    passwordFormat="Hashed"
                    writeExceptionsToEventLog="true"
                />
          </providers>
        </membership>
    </system.web>
  5. That's it! You can use the login controls provided in the ASP.NET framework v2.0 if you want or use your own controls.

You can do whatever you want with this code but just send me an email if you have done some improvements or some bug correction. Isn't that what this website is about, sharing?

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

Rakotomalala Andriniaina

Web Developer

France France

Member
I am a software developper working for a multinational, in the south of France.

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board. (secure sign-in)
 
Search this forum  
 FAQ
    Noise  Layout  Per page   
  Refresh
GeneralWebsite Administration Tool Pinmemberb_hardman13:42 27 Apr '07  
GeneralRe: Website Administration Tool PinmemberGerritJanGerritJan23:45 2 Oct '07  
GeneralRe: Website Administration Tool PinmemberH0G4N0:58 23 Nov '07  
GeneralProblema com conexao PinmemberGilberto Pavanelli15:44 23 Apr '07  
GeneralRe: Problema com conexao Pinmemberwdanda23:39 25 Aug '07  
Questionerror loading Pinmembernictmanss4:14 20 Apr '07  
GeneralSQL Code didn't work in Navicat for MySQL, here's an update PinmemberVeector10:36 17 Apr '07  
In MySQL the character to use to specifically identify a table name is `
For these tables, it is unnecessary to use the single quotes around the names.
This is the new code below...Smile | :)
 
CREATE TABLE Roles
(
Rolename varchar (255) NOT NULL,
ApplicationName varchar (255) NOT NULL
);
 
CREATE TABLE UsersInRoles
(
Username varchar (255) NOT NULL,
Rolename varchar (255) NOT NULL,
ApplicationName varchar (255) NOT NULL
);
 
ALTER TABLE UsersInRoles ADD INDEX (Username, Rolename, ApplicationName) ;
ALTER TABLE Roles ADD INDEX (Rolename, ApplicationName) ;
 
CREATE TABLE Users (
PKID varchar(36) NOT NULL default '',
Username varchar(255) NOT NULL default '',
ApplicationName varchar(100) NOT NULL default '' ,
Email varchar(100) NOT NULL default '',
`Comment` varchar(255) default NULL,
`Password` varchar(128) NOT NULL default '',
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,
IsOnLine tinyint(1) default NULL,
IsLockedOut tinyint(1) default NULL,
LastLockedOutDate datetime default NULL,
FailedPasswordAttemptCount int(11) default NULL,
FailedPasswordAttemptWindowStart datetime default NULL,
FailedPasswordAnswerAttemptCount int(11) default NULL,
FailedPasswordAnswerAttemptWindowStart datetime default NULL,
PRIMARY KEY (`PKID`)
);
GeneralRe: SQL Code didn't work in Navicat for MySQL, here's an update Pinmemberdustinhorne4:56 19 Sep '07  
GeneralHers is the MySQL 4 SQL Pinmemberdustinhorne7:10 9 Apr '07  
GeneralRe: Hers is the MySQL 4 SQL Pinmemberdustinhorne5:07 14 Sep '07  
QuestionRe: Hers is the MySQL 4 SQL Pinmemberjosepaulino19:32 30 Sep '07  
AnswerRe: Hers is the MySQL 4 SQL Pinmemberjosepaulino19:38 30 Sep '07  
GeneralHere is the VB Version Pinmemberdustinhorne6:53 9 Apr '07  
GeneralRe: Here is the VB Version PinmemberZyndrof7:49 26 Apr '07  
AnswerRe: Here is the VB Version Pinmemberdustinhorne11:24 30 Apr '07  
GeneralRe: Here is the VB Version Pinmemberdustinhorne5:06 14 Sep '07  
QuestionHow to create login session? PinmemberMaysoon_Ahmad12:14 2 Apr '07  
GeneralUpdated Code Pinmembercyber0ne13:53 10 Mar '07  
QuestionHow about a VB version of this, is there one out there? Pinmembersrbytes10:48 5 Mar '07  
AnswerRe: How about a VB version of this, is there one out there? Pinmemberpjohanse19:57 9 Mar '07  
GeneralRe: How about a VB version of this, is there one out there? Pinmemberoitt9922:46 9 Mar '07  
GeneralRe: How about a VB version of this, is there one out there? Pinmemberoitt9923:52 11 Mar '07  
GeneralRe: How about a VB version of this, is there one out there? Pinmemberoitt998:43 12 Mar '07  
QuestionPasswordRecovery Control Problem PinmemberPurple Fox5:44 22 Jan '07  
QuestionRe: PasswordRecovery Control Problem Pinmemberjosepaulino18:57 30 Sep '07  

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Mobile
Web04 | 2.5.120210.1 | Last Updated 20 Dec 2005
Article Copyright 2005 by Rakotomalala Andriniaina
Everything else Copyright © CodeProject, 1999-2012
Terms of Use
Layout: fixed | fluid