Click here to Skip to main content
Click here to Skip to main content

Membership and Role providers for MySQL

By , 20 Dec 2005
 

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

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
GeneralThank youmemberBruno921306 Mar '10 - 4:31 
Generalstep 1 errormemberthisismycode11 Sep '09 - 0:39 
GeneralRe: step 1 errormemberurbluca16 Oct '09 - 0:57 
GeneralRe: step 1 errormemberRuandv9 Dec '09 - 20:54 
GeneralRecompilingmembersimba22225 Aug '09 - 2:26 
QuestionCould not load type 'Andri.Web.MySqlRoleProvider'.memberThe_J0ker8 Jul '09 - 22:15 
Generalhelp mememberjorgebatista0710 Jun '09 - 19:43 
GeneralRe: help mememberThe_J0ker8 Jul '09 - 22:19 
Generalerrormemberjorgebatista0710 Jun '09 - 19:38 
GeneralRe: errormemberpalmerm112 Jun '09 - 4:44 
GeneralRe: errormemberpalmerm112 Jun '09 - 5:16 
QuestionProvider Could Not Establish A Connection to the Database PLEASE HELP1memberTransMayernik7516 Apr '09 - 12:10 
AnswerRe: Provider Could Not Establish A Connection to the Database PLEASE HELP1memberTransMayernik7516 Apr '09 - 16:25 
Generalcannot handle more than one usermembermam5429 Nov '08 - 3:17 
GeneralRe: cannot handle more than one usermembermam5429 Nov '08 - 4:29 
QuestionNatively supported by connector?memberlblogic19 Nov '08 - 11:46 
GeneralAdd new role and add a user in a rolemembersemi2 Nov '08 - 11:29 
GeneralUsing .NET Connector v5.2.3memberpalmerm119 Oct '08 - 18:16 
GeneralProfilememberuswebpro22 Sep '08 - 22:21 
General"Could not find any recognizable digits" - errormemberJo3p19 Jun '08 - 5:08 
Questionhow to add custom fields like Firstname etc using Andri Mysql Membership Providermemberryandemelo11 Jun '08 - 7:53 
QuestionCan't use this provider to get the currently logged in usermemberandieje18 May '08 - 11:38 
AnswerRe: Can't use this provider to get the currently logged in usermembervakti25 May '08 - 8:38 
QuestionHow to provide Custome eror messagememberpodal24 Apr '08 - 17:31 
GeneralWhy not Navigate to my Request URLmemberpodal23 Apr '08 - 16:49 
QuestionCookies Time ExpiresmemberMember 33556823 Apr '08 - 4:47 
QuestionHow to use this Role provider for Oracle databasememberelizabethsheeba11 Mar '08 - 5:36 
GeneralMySQL Connector/Net 5.2.1 [modified]membernolan3 Mar '08 - 16:10 
GeneralRe: MySQL Connector/Net 5.2.1memberMatthew Clemmons21 Mar '08 - 14:16 
GeneralRe: MySQL Connector/Net 5.2.1memberfooboo_025 Jul '08 - 5:29 
QuestionIs it just me?memberMike Codey24 Feb '08 - 5:31 
AnswerRe: Is it just me?membernafster16 Apr '08 - 2:05 
QuestionWhat about odbc and mysql?memberReader Tommy12 Feb '08 - 6:52 
GeneralIf Locked need to display an new custom messge [modified]memberMember 408285327 Jan '08 - 19:39 
GeneralConfiguration Errormemberhaniel3 Jan '08 - 13:38 
GeneralRe: Configuration Errormemberbuiductien4 Jan '08 - 16:25 
GeneralRe: Configuration ErrormemberGary Loftus15 Mar '08 - 6:03 
GeneralRe: Configuration ErrormemberHawkmoth6 Aug '08 - 1:59 
QuestionHow to achieve aspnet2.0 framework to not to create ASPNETDB.MDF file in the APP_DATA directorymemberMember 22998228 Dec '07 - 8:23 
Questioncompiling the providersmemberingresman13 Dec '07 - 0:47 
GeneralDon't forget the GOmemberTyKie11 Dec '07 - 17:19 
GeneralProper SQL code for databasesmemberBursh.24 Nov '07 - 1:29 
GeneralRe: Proper SQL code for databasesmemberYeorwned12 Mar '08 - 6:03 
GeneralRe: Proper SQL code for databasesmemberpowder8powder16 Jun '08 - 1:48 
GeneralThanks and Helpmemberbill.buckley11 Nov '07 - 15:54 
GeneralRe: Thanks and Helpmemberbox86rowh14 Nov '07 - 7:56 
GeneralRe: Thanks and Helpmemberbill.buckley14 Nov '07 - 15:23 
GeneralRe: Thanks and Helpmemberorinoco7727 Jul '08 - 8:09 
Questioncan somebody speak german?memberas120825 Oct '07 - 8:08 
GeneralMySqlMembershipProvider functionsmembermarvc116 Oct '07 - 4:35 

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

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