Click here to Skip to main content
5,788,961 members and growing! (20,516 online)
Email Password   helpLost your password?
Database » Database » General     Intermediate

Membership and Role providers for MySQL

By Rakotomalala Andriniaina

This article provides two files that contain a Membership Provider and a Role Provider for ASP.NET v2.0.
Javascript, XML, C#, Windows, .NET, Visual Studio, ASP.NET, Ajax, MySQL, Architect, Dev

Posted: 16 Nov 2005
Updated: 20 Dec 2005
Views: 271,539
Bookmarked: 118 times
Announcements
Loading...



Search    
Advanced Search
Sitemap
57 votes for this Article.
Popularity: 8.03 Rating: 4.57 out of 5
1 vote, 1.8%
1
1 vote, 1.8%
2
1 vote, 1.8%
3
6 votes, 10.5%
4
48 votes, 84.2%
5

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


I am a software developper working for a multinational, in the south of France.
Occupation: Web Developer
Location: France France

Other popular Database articles:

Article Top
Sign Up to vote for this article
You must Sign In to use this message board.
FAQ FAQ Noise ToleranceSearch Search Messages 
 Layout  Per page   
 Msgs 1 to 25 of 198 (Total in Forum: 198) (Refresh)FirstPrevNext
Generalcannot handle more than one usermembermam544:17 29 Nov '08  
GeneralRe: cannot handle more than one usermembermam545:29 29 Nov '08  
GeneralNatively supported by connector?memberlblogic12:46 19 Nov '08  
GeneralAdd new role and add a user in a rolemembersemi12:29 2 Nov '08  
GeneralUsing .NET Connector v5.2.3memberpalmerm119:16 19 Oct '08  
GeneralProfilememberuswebpro223:21 2 Sep '08  
General"Could not find any recognizable digits" - errormemberJo3p6:08 19 Jun '08  
Generalhow to add custom fields like Firstname etc using Andri Mysql Membership Providermemberryandemelo8:53 11 Jun '08  
QuestionCan't use this provider to get the currently logged in usermemberandieje112:38 8 May '08  
AnswerRe: Can't use this provider to get the currently logged in usermembervakti9:38 25 May '08  
GeneralHow to provide Custome eror messagememberpodal18:31 24 Apr '08  
GeneralWhy not Navigate to my Request URLmemberpodal17:49 23 Apr '08  
QuestionCookies Time ExpiresmemberMember 33556825:47 3 Apr '08  
GeneralHow to use this Role provider for Oracle databasememberelizabethsheeba6:36 11 Mar '08  
GeneralMySQL Connector/Net 5.2.1 [modified]membernolan17:10 3 Mar '08  
GeneralRe: MySQL Connector/Net 5.2.1memberMatthew Clemmons15:16 21 Mar '08  
GeneralRe: MySQL Connector/Net 5.2.1memberfooboo_06:29 25 Jul '08  
GeneralIs it just me?memberMike Codey6:31 24 Feb '08  
QuestionRe: Is it just me?membernafster3:05 16 Apr '08  
GeneralWhat about odbc and mysql?memberReader Tommy7:52 12 Feb '08  
GeneralIf Locked need to display an new custom messge [modified]memberMember 408285320:39 27 Jan '08  
GeneralConfiguration Errormemberhaniel14:38 3 Jan '08  
GeneralRe: Configuration Errormemberbuiductien17:25 4 Jan '08  
GeneralRe: Configuration ErrormemberGary Loftus7:03 15 Mar '08  
GeneralRe: Configuration ErrormemberHawkmoth2:59 6 Aug '08  

General General    News News