<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="/rss.xsl"?><rss version="2.0"><channel><title>AltairisWebSecurity Wiki &amp; Documentation Rss Feed</title><link>http://www.codeplex.com/AltairisWebSecurityctName=AltairisWebProviders&amp;title=Home</link><description>AltairisWebSecurity Wiki Rss Description</description><item><title>Updated Wiki: Home</title><link>http://altairiswebsecurity.codeplex.com/wikipage?version=16</link><description>&lt;div class="wikidoc"&gt;The &lt;b&gt;Altairis Web Security Toolkit&lt;/b&gt; consists of several parts:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=SQL%20Table%20Providers&amp;referringTitle=Home"&gt;SQL Table Providers&lt;/a&gt;&lt;/b&gt; are re-implementation of standard ASP.NET membership, profile and role providers, but using simple database structure.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=PlainTextMembershipProvider&amp;referringTitle=Home"&gt;PlainTextMembershipProvider&lt;/a&gt;&lt;/b&gt; is basic low-security membership provider using plain text file as its user database.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=BasicAuthenticationModule&amp;referringTitle=Home"&gt;BasicAuthenticationModule&lt;/a&gt;&lt;/b&gt; is authentication module for ASP.NET/IIS7, implementing standard HTTP Basic Authentication, working with any membership provider (including, but not limited to the two contained in this library)&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;The original release (older than 2.0) contained also &lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=Simple%20SQL%20Providers&amp;referringTitle=Home"&gt;Simple SQL Providers&lt;/a&gt;, which are no longer developed and were replaced by SQL Table Providers mentioned above. The relevant classes are still present in the assembly, but are now marked as obsolete.&lt;br /&gt;
&lt;h2&gt;Altairis Web Security toolkit is in the NuGet Gallery&lt;/h2&gt;
You may install Altairis Web Security Toolkit using the &lt;b&gt;NuGet package manager&lt;/b&gt; (former NuPack). The package name is &lt;i&gt;Altairis.Web.Security&lt;/i&gt;,&lt;br /&gt;&lt;br /&gt;For more info about NuGet visit &lt;a href="http://www.nuget.org"&gt;http://www.nuget.org&lt;/a&gt;.&lt;br /&gt;
&lt;h2&gt;Database agnostic providers&lt;/h2&gt;
Since release &lt;a href="http://altairiswebsecurity.codeplex.com/releases/view/59664"&gt;2.2.0&lt;/a&gt; are the &lt;i&gt;TableMembershipProvider&lt;/i&gt; and &lt;i&gt;TableRoleProvider&lt;/i&gt; classes database agnostic. They should be working with any SQL database, for which an ADO.NET provider is available. Currently, SQL Server and SQL Compact 4.0 are tested to work. See the following links for setup instructions:
&lt;ul&gt;&lt;li&gt;&lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=Microsoft%20SQL%20Server%20Support&amp;referringTitle=Home"&gt;Microsoft SQL Server Support&lt;/a&gt; (version 2005, 2008, 2008 R2, including Express editions)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=SQL%20Server%20Compact%20Support&amp;referringTitle=Home"&gt;SQL Server Compact Support&lt;/a&gt; (version 4.0)&lt;/li&gt;&lt;/ul&gt;

&lt;h2&gt;Using Entity Framework Code First&lt;/h2&gt;
The Table*Providers work well with Entity Framework Code first. Read more in the following articles on Culbertson Exchange:
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.culbertsonexchange.com/wp/?p=120"&gt;Code First EF 4.1 with the Altairis Membership/Role Provider&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.culbertsonexchange.com/wp/?p=166"&gt;User Initialization in Code First/Altairis&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h2&gt;Further information&lt;/h2&gt;
&lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=Author%20and%20contact&amp;referringTitle=Home"&gt;Author and contact&lt;/a&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>altair</author><pubDate>Sun, 08 Jul 2012 14:18:52 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20120708021852P</guid></item><item><title>Updated Wiki: SQL Table Providers</title><link>http://altairiswebsecurity.codeplex.com/wikipage?title=SQL Table Providers&amp;version=5</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;SQL Table Providers&lt;/h1&gt;
The provider object model, as present in ASP.NET 2.0, is a great step forward from hand-coded behavior in ASP.NET 1.x. But the provider model is only as useful as are available providers. Microsoft .NET itself contains set of providers which can store their data in Microsoft SQL Server database: &lt;b&gt;SqlMembershipProvider&lt;/b&gt;, &lt;b&gt;SqlRoleProvider&lt;/b&gt; and &lt;b&gt;SqlProfileProvider&lt;/b&gt;. However, database structure used by these providers is pretty complicated and almost impossible to interconnect with your own tables etc.&lt;br /&gt;&lt;br /&gt;So I created set of my own providers, using very simple table structure. Some functionality of the original providers was lost, especially the ability to store data for several applications in single database. But the simple and straightforward database allows you to easily plug it into your existing infrastructure.&lt;br /&gt;
&lt;h2&gt;Features&lt;/h2&gt;
&lt;h3&gt;Simplicity, ability to connect to rest of database infrastructure&lt;/h3&gt;
The main goal of these providers is to use simple table structure, which can be easily connected to other database architecture using foreign keys etc. The tables used are also extendable, additional columns may be created, as long as they are nullable or have default values.&lt;br /&gt;
&lt;h3&gt;Database independence&lt;/h3&gt;
The providers are written to be database agnostic, as long as the database has ADO.NET provider and understands SQL and named parameters. Microsoft SQL Server and SQL Compact are the main target databases and the providers are tested to work with them. See the following links for setup instructions: 
&lt;ul&gt;&lt;li&gt;&lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=Microsoft%20SQL%20Server%20Support&amp;referringTitle=SQL%20Table%20Providers"&gt;Microsoft SQL Server Support&lt;/a&gt; (version 2005, 2008, 2008 R2, including Express editions) &lt;/li&gt;
&lt;li&gt;&lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=SQL%20Server%20Compact%20Support&amp;referringTitle=SQL%20Table%20Providers"&gt;SQL Server Compact Support&lt;/a&gt; (version 4.0)&lt;/li&gt;&lt;/ul&gt;

&lt;h3&gt;Account lockdown not supported&lt;/h3&gt;
The ASP.NET Membership infrastructure supports the account lockdown feature. After several failed login attempts, the account is disabled. In my eyes this feature offers great opportunity for denial of service attack directed to certain users - I can write a program which will repeatedly login with random passwords and deny access to legitimate users. Therefore the functionality is intentionally not implemented in the providers. use other way to protect your application from dictionary attacks.&lt;br /&gt;
&lt;h3&gt;Differences from Simple SQL Providers&lt;/h3&gt;
The first generation of providers was quite successful, so I retained the good bits, but the providers are basically rewritten from scratch, in new .NET 4.0.&lt;br /&gt;&lt;br /&gt;The new SQL Table providers have several additional features:
&lt;ul&gt;&lt;li&gt;For hashing, the standard HMACSHA512 class and algo are supported, instead of homebrew salting.&lt;/li&gt;
&lt;li&gt;Password hash and salt (or key, in HMAC terminology) are stored as binary database fields, not Base64-encoded strings.&lt;/li&gt;
&lt;li&gt;The int UserId column was dropped and UserName is now used as primary key instead.&lt;/li&gt;
&lt;li&gt;Implemented better tracking of user activity and now supporting the GetNumberOfUsersOnline method.&lt;/li&gt;
&lt;li&gt;Names of all tables are now configurable.&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;The downside of the new password hashing and storage is that there is no upgrade path from the Simple SQL Providers. You can upgrade easily, but the passwords are lost. So in case of upgrading, you need to notify your users and issue new passwords or use some kind of password reset mechanisms.&lt;br /&gt;
&lt;h2&gt;Configuring the providers in web.config&lt;/h2&gt;
To use the SQL Table providers, include the following settings in your &lt;b&gt;web.config&lt;/b&gt; file:&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;configuration&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;appSettings&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;connectionStrings&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;add&lt;/span&gt; &lt;span style="color:Red;"&gt;name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;TableAuthDB&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;providerName&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;System.Data.SqlClient&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;connectionString&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;...&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;connectionStrings&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;system.web&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;membership&lt;/span&gt; &lt;span style="color:Red;"&gt;defaultProvider&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;MyMembershipProvider&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;providers&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;clear&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;add&lt;/span&gt; &lt;span style="color:Red;"&gt;name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;MyMembershipProvider&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;
                     &lt;span style="color:Red;"&gt;type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Altairis.Web.Security.TableMembershipProvider, Altairis.Web.Security&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;
                     &lt;span style="color:Red;"&gt;connectionStringName&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;TableAuthDB&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;providers&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;membership&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;roleManager&lt;/span&gt; &lt;span style="color:Red;"&gt;enabled&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;true&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;defaultProvider&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;MyRoleProvider&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;providers&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;clear&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;add&lt;/span&gt; &lt;span style="color:Red;"&gt;name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;MyRoleProvider&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; 
                     &lt;span style="color:Red;"&gt;type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Altairis.Web.Security.TableRoleProvider, Altairis.Web.Security&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;
                     &lt;span style="color:Red;"&gt;connectionStringName&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;TableAuthDB&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;providers&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;roleManager&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;system.web&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;configuration&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;Configuring membership provider&lt;/h3&gt;
The following configuration attributes are supported:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Common for all membership providers:
&lt;ul&gt;&lt;li&gt;&lt;b&gt;applicationName&lt;/b&gt; (can be set, but is ignored)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;minRequiredNonAlphanumericCharacters&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;minRequiredPasswordLength&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;passwordStrengthRegularExpression&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;requiresUniqueEmail&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Specific for this provider:
&lt;ul&gt;&lt;li&gt;&lt;b&gt;connectionStringName&lt;/b&gt; - name of connection string defined in the &lt;i&gt;connectionStrings&lt;/i&gt; section to use for database connectivity.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;tableName&lt;/b&gt; - name of database table to store user information. Default is &lt;i&gt;Users&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;useEmailAddressAsUserName&lt;/b&gt; - when set to &lt;i&gt;true&lt;/i&gt;, user name is forced to be the same as e-mail address. The &lt;i&gt;requiresUniqueEmail&lt;/i&gt; attribute must be set to &lt;i&gt;true&lt;/i&gt; as well. By changing e-mail address, user name is changed too, which may cause interoperability problems, so use with caution. &lt;/li&gt;
&lt;li&gt;&lt;b&gt;useDateTimeOffset&lt;/b&gt;* - when set to &lt;i&gt;true&lt;/i&gt;, the &lt;span class="codeInline"&gt;datetimeoffset&lt;/span&gt; data type is used internally instead of &lt;span class="codeInline"&gt;datetime&lt;/span&gt;. Use when working with database structure using it.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;userKeyType&lt;/b&gt; - allows specify &lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=Custom%20Provider%20User%20Keys&amp;referringTitle=SQL%20Table%20Providers"&gt;Custom Provider User Keys&lt;/a&gt;; may have following values:
&lt;ul&gt;&lt;li&gt;&lt;i&gt;UserName&lt;/i&gt; (default) - user name is used as provider user key&lt;/li&gt;
&lt;li&gt;&lt;i&gt;IntIdentity&lt;/i&gt; - integer generated by database backend (by means of IDENTITY clause or similar mechanism) is used as provider user key&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Guid&lt;/i&gt; - GUID is generated by membership prpvoder and used as key&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h3&gt;Configuring role provider&lt;/h3&gt;
The following configuration attributes are supported:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Common for all role providers:
&lt;ul&gt;&lt;li&gt;&lt;b&gt;applicationName&lt;/b&gt; (can be set, but is ignored)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Specific for this provider:
&lt;ul&gt;&lt;li&gt;&lt;b&gt;connectionStringName&lt;/b&gt; - name of connection string defined in the &lt;i&gt;connectionStrings&lt;/i&gt; section to use for database connectivity.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;rolesTableName&lt;/b&gt; - name of database table to store roles. Default is &lt;i&gt;Roles&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;roleMembershipsTableName&lt;/b&gt; - name of database table to store information about role members. Default is &lt;i&gt;RoleMemberships&lt;/i&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>altair</author><pubDate>Sun, 08 Jul 2012 14:12:24 GMT</pubDate><guid isPermaLink="false">Updated Wiki: SQL Table Providers 20120708021224P</guid></item><item><title>New Comment on "SQL Table Providers"</title><link>http://altairiswebsecurity.codeplex.com/wikipage?title=SQL Table Providers&amp;ANCHOR#C18635</link><description>Nice work, and thanks.</description><author>IslandTalker</author><pubDate>Mon, 21 Feb 2011 07:58:58 GMT</pubDate><guid isPermaLink="false">New Comment on "SQL Table Providers" 20110221075858A</guid></item><item><title>New Comment on "Microsoft SQL Server Support"</title><link>http://altairiswebsecurity.codeplex.com/wikipage?title=Microsoft SQL Server Support&amp;ANCHOR#C18634</link><description>Hi, Does the email have to be nvarchar&amp;#40;max&amp;#41;&amp;#63; Seem rather large for an email.</description><author>IslandTalker</author><pubDate>Mon, 21 Feb 2011 07:55:31 GMT</pubDate><guid isPermaLink="false">New Comment on "Microsoft SQL Server Support" 20110221075531A</guid></item><item><title>Updated Wiki: Custom Provider User Keys</title><link>http://altairiswebsecurity.codeplex.com/wikipage?title=Custom Provider User Keys&amp;version=2</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Custom Provider User Keys&lt;/h1&gt;
Since release &lt;a href="http://altairiswebsecurity.codeplex.com/releases/view/59729"&gt;2.3.0&lt;/a&gt; you have three ways of using provider user keys (main identifiers): user names, integer identities and GUIDs.&lt;br /&gt;
&lt;h2&gt;Using user names&lt;/h2&gt;
Primary key in database (or &amp;quot;provider user key&amp;quot; in membership terminology) is the user name string. This is default value. No special configuration and changes in database are needed.&lt;br /&gt;
&lt;h2&gt;Using integer identities&lt;/h2&gt;
To use integer identities, set the &lt;b&gt;userKeyType&lt;/b&gt; configuration attribute to &lt;b&gt;IntIdentity&lt;/b&gt;. In this case, integer identifier is used as primary key. The key is to be generated on database side, by means of the IDENTITY clause or similar mechanism on column named UserId. Is recommended (although not technically required) to specify additional unique index over the UserName table.&lt;br /&gt;&lt;br /&gt;The following SQL command can be used to create required table in MS SQL Server:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;CREATE&lt;/span&gt; &lt;span style="color:Blue;"&gt;TABLE&lt;/span&gt; Users (
    UserId                  &lt;span style="color:Blue;"&gt;int&lt;/span&gt; &lt;span style="color:Blue;"&gt;identity&lt;/span&gt;        &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    UserName                &lt;span style="color:Blue;"&gt;nvarchar&lt;/span&gt;(100)       &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    PasswordHash            &lt;span style="color:Blue;"&gt;binary&lt;/span&gt;(64)          &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    PasswordSalt            &lt;span style="color:Blue;"&gt;binary&lt;/span&gt;(128)         &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    Email                   &lt;span style="color:Blue;"&gt;nvarchar&lt;/span&gt;(&lt;span style="color:Magenta;"&gt;max&lt;/span&gt;)       &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    Comment                 &lt;span style="color:Blue;"&gt;nvarchar&lt;/span&gt;(&lt;span style="color:Magenta;"&gt;max&lt;/span&gt;)       &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    IsApproved              &lt;span style="color:Blue;"&gt;bit&lt;/span&gt;                 &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    DateCreated             &lt;span style="color:Blue;"&gt;datetime&lt;/span&gt;            &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    DateLastLogin           &lt;span style="color:Blue;"&gt;datetime&lt;/span&gt;            &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    DateLastActivity        &lt;span style="color:Blue;"&gt;datetime&lt;/span&gt;            &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    DateLastPasswordChange  &lt;span style="color:Blue;"&gt;datetime&lt;/span&gt;            &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    &lt;span style="color:Blue;"&gt;CONSTRAINT&lt;/span&gt; PK_UsersByIntIdentity &lt;span style="color:Blue;"&gt;PRIMARY&lt;/span&gt; &lt;span style="color:Blue;"&gt;KEY&lt;/span&gt; &lt;span style="color:Blue;"&gt;CLUSTERED&lt;/span&gt; (UserId)
)
&lt;span style="color:Blue;"&gt;CREATE&lt;/span&gt; &lt;span style="color:Blue;"&gt;UNIQUE&lt;/span&gt; &lt;span style="color:Blue;"&gt;NONCLUSTERED&lt;/span&gt; &lt;span style="color:Blue;"&gt;INDEX&lt;/span&gt; IX_Users_UserName &lt;span style="color:Blue;"&gt;ON&lt;/span&gt; Users (UserName)

&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;Using GUIDs&lt;/h2&gt;To use GUID identities, set the &lt;b&gt;userKeyType&lt;/b&gt; configuration attribute to &lt;b&gt;Guid&lt;/b&gt;. In this case, uniqueidentifier is used as primary key. The key is generated on provideer side, you only need to add uniqueidentifier column named UserId. Is recommended (although not technically required) to specify additional unique index over the UserName table.&lt;br /&gt;&lt;br /&gt;In this setting, you can explicitly specify &lt;i&gt;providerUserKey&lt;/i&gt; argument in the &lt;i&gt;CreateUser&lt;/i&gt; method, as long as it&amp;#39;s unique GUID. If you don&amp;#39;t specify it, the key would be generated automatically.&lt;br /&gt;&lt;br /&gt;The following SQL command can be used to create required table in MS SQL Server:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;CREATE&lt;/span&gt; &lt;span style="color:Blue;"&gt;TABLE&lt;/span&gt; Users (
    UserId                  &lt;span style="color:Blue;"&gt;uniqueidentifier&lt;/span&gt;    &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    UserName                &lt;span style="color:Blue;"&gt;nvarchar&lt;/span&gt;(100)       &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    PasswordHash            &lt;span style="color:Blue;"&gt;binary&lt;/span&gt;(64)          &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    PasswordSalt            &lt;span style="color:Blue;"&gt;binary&lt;/span&gt;(128)         &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    Email                   &lt;span style="color:Blue;"&gt;nvarchar&lt;/span&gt;(&lt;span style="color:Magenta;"&gt;max&lt;/span&gt;)       &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    Comment                 &lt;span style="color:Blue;"&gt;nvarchar&lt;/span&gt;(&lt;span style="color:Magenta;"&gt;max&lt;/span&gt;)       &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    IsApproved              &lt;span style="color:Blue;"&gt;bit&lt;/span&gt;                 &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    DateCreated             &lt;span style="color:Blue;"&gt;datetime&lt;/span&gt;            &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    DateLastLogin           &lt;span style="color:Blue;"&gt;datetime&lt;/span&gt;            &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    DateLastActivity        &lt;span style="color:Blue;"&gt;datetime&lt;/span&gt;            &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    DateLastPasswordChange  &lt;span style="color:Blue;"&gt;datetime&lt;/span&gt;            &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    &lt;span style="color:Blue;"&gt;CONSTRAINT&lt;/span&gt; PK_UsersByGuid &lt;span style="color:Blue;"&gt;PRIMARY&lt;/span&gt; &lt;span style="color:Blue;"&gt;KEY&lt;/span&gt; &lt;span style="color:Blue;"&gt;CLUSTERED&lt;/span&gt; (UserId)
)
&lt;span style="color:Blue;"&gt;CREATE&lt;/span&gt; &lt;span style="color:Blue;"&gt;UNIQUE&lt;/span&gt; &lt;span style="color:Blue;"&gt;NONCLUSTERED&lt;/span&gt; &lt;span style="color:Blue;"&gt;INDEX&lt;/span&gt; IX_Users_UserName &lt;span style="color:Blue;"&gt;ON&lt;/span&gt; Users (UserName)
&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;Sample&lt;/h2&gt;
See the &lt;i&gt;TableProviderSampleUserKeys&lt;/i&gt; sample for info how to use and configure this feature.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>altair</author><pubDate>Thu, 27 Jan 2011 01:06:29 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Custom Provider User Keys 20110127010629A</guid></item><item><title>Updated Wiki: Custom Provider User Keys</title><link>http://altairiswebsecurity.codeplex.com/wikipage?title=Custom Provider User Keys&amp;version=1</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Custom Provider User Keys&lt;/h1&gt;
Since release &lt;a href="http://altairiswebsecurity.codeplex.com/releases/view/59729"&gt;2.3.0&lt;/a&gt; you have three ways of using provider user keys (main identifiers): user names, integer identities and GUIDs.&lt;br /&gt;
&lt;h2&gt;Using user names&lt;/h2&gt;
Primary key in database (or &amp;quot;provider user key&amp;quot; in membership terminology) is the user name string. This is default value. No special configuration and changes in database are needed.&lt;br /&gt;
&lt;h2&gt;Using integer identities&lt;/h2&gt;
To use integer identities, set the &lt;b&gt;userKeyType&lt;/b&gt; configuration attribute to &lt;b&gt;IntIdentity&lt;/b&gt;. In this case, integer identifier is used as primary key. The key is to be generated on database side, by means of the IDENTITY clause or similar mechanism on column named UserId. Is recommended (although not technically required) to specify additional unique index over the UserName table.&lt;br /&gt;&lt;br /&gt;The following SQL command can be used to create required table in MS SQL Server:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;CREATE&lt;/span&gt; &lt;span style="color:Blue;"&gt;TABLE&lt;/span&gt; Users (
    UserId                  &lt;span style="color:Blue;"&gt;int&lt;/span&gt; &lt;span style="color:Blue;"&gt;identity&lt;/span&gt;        &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    UserName                &lt;span style="color:Blue;"&gt;nvarchar&lt;/span&gt;(100)       &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    PasswordHash            &lt;span style="color:Blue;"&gt;binary&lt;/span&gt;(64)          &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    PasswordSalt            &lt;span style="color:Blue;"&gt;binary&lt;/span&gt;(128)         &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    Email                   &lt;span style="color:Blue;"&gt;nvarchar&lt;/span&gt;(&lt;span style="color:Magenta;"&gt;max&lt;/span&gt;)       &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    Comment                 &lt;span style="color:Blue;"&gt;nvarchar&lt;/span&gt;(&lt;span style="color:Magenta;"&gt;max&lt;/span&gt;)       &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    IsApproved              &lt;span style="color:Blue;"&gt;bit&lt;/span&gt;                 &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    DateCreated             &lt;span style="color:Blue;"&gt;datetime&lt;/span&gt;            &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    DateLastLogin           &lt;span style="color:Blue;"&gt;datetime&lt;/span&gt;            &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    DateLastActivity        &lt;span style="color:Blue;"&gt;datetime&lt;/span&gt;            &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    DateLastPasswordChange  &lt;span style="color:Blue;"&gt;datetime&lt;/span&gt;            &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    &lt;span style="color:Blue;"&gt;CONSTRAINT&lt;/span&gt; PK_UsersByIntIdentity &lt;span style="color:Blue;"&gt;PRIMARY&lt;/span&gt; &lt;span style="color:Blue;"&gt;KEY&lt;/span&gt; &lt;span style="color:Blue;"&gt;CLUSTERED&lt;/span&gt; (UserId)
)
&lt;span style="color:Blue;"&gt;CREATE&lt;/span&gt; &lt;span style="color:Blue;"&gt;UNIQUE&lt;/span&gt; &lt;span style="color:Blue;"&gt;NONCLUSTERED&lt;/span&gt; &lt;span style="color:Blue;"&gt;INDEX&lt;/span&gt; IX_UsersByIntIdentity_UserName &lt;span style="color:Blue;"&gt;ON&lt;/span&gt; UsersByIntIdentity (UserName)

&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;Using GUIDs&lt;/h2&gt;To use GUID identities, set the &lt;b&gt;userKeyType&lt;/b&gt; configuration attribute to &lt;b&gt;Guid&lt;/b&gt;. In this case, uniqueidentifier is used as primary key. The key is generated on provideer side, you only need to add uniqueidentifier column named UserId. Is recommended (although not technically required) to specify additional unique index over the UserName table.&lt;br /&gt;&lt;br /&gt;In this setting, you can explicitly specify &lt;i&gt;providerUserKey&lt;/i&gt; argument in the &lt;i&gt;CreateUser&lt;/i&gt; method, as long as it&amp;#39;s unique GUID. If you don&amp;#39;t specify it, the key would be generated automatically.&lt;br /&gt;&lt;br /&gt;The following SQL command can be used to create required table in MS SQL Server:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;CREATE&lt;/span&gt; &lt;span style="color:Blue;"&gt;TABLE&lt;/span&gt; Users (
    UserId                  &lt;span style="color:Blue;"&gt;uniqueidentifier&lt;/span&gt;    &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    UserName                &lt;span style="color:Blue;"&gt;nvarchar&lt;/span&gt;(100)       &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    PasswordHash            &lt;span style="color:Blue;"&gt;binary&lt;/span&gt;(64)          &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    PasswordSalt            &lt;span style="color:Blue;"&gt;binary&lt;/span&gt;(128)         &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    Email                   &lt;span style="color:Blue;"&gt;nvarchar&lt;/span&gt;(&lt;span style="color:Magenta;"&gt;max&lt;/span&gt;)       &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    Comment                 &lt;span style="color:Blue;"&gt;nvarchar&lt;/span&gt;(&lt;span style="color:Magenta;"&gt;max&lt;/span&gt;)       &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    IsApproved              &lt;span style="color:Blue;"&gt;bit&lt;/span&gt;                 &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    DateCreated             &lt;span style="color:Blue;"&gt;datetime&lt;/span&gt;            &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    DateLastLogin           &lt;span style="color:Blue;"&gt;datetime&lt;/span&gt;            &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    DateLastActivity        &lt;span style="color:Blue;"&gt;datetime&lt;/span&gt;            &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    DateLastPasswordChange   &lt;span style="color:Blue;"&gt;datetime&lt;/span&gt;           &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    &lt;span style="color:Blue;"&gt;CONSTRAINT&lt;/span&gt; PK_UsersByGuid &lt;span style="color:Blue;"&gt;PRIMARY&lt;/span&gt; &lt;span style="color:Blue;"&gt;KEY&lt;/span&gt; &lt;span style="color:Blue;"&gt;CLUSTERED&lt;/span&gt; (UserId)
)
&lt;span style="color:Blue;"&gt;CREATE&lt;/span&gt; &lt;span style="color:Blue;"&gt;UNIQUE&lt;/span&gt; &lt;span style="color:Blue;"&gt;NONCLUSTERED&lt;/span&gt; &lt;span style="color:Blue;"&gt;INDEX&lt;/span&gt; IX_UsersByGuid_UserName &lt;span style="color:Blue;"&gt;ON&lt;/span&gt; UsersByGuid (UserName)
&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;Sample&lt;/h2&gt;
See the &lt;i&gt;TableProviderSampleUserKeys&lt;/i&gt; sample for info how to use and configure this feature.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>altair</author><pubDate>Tue, 25 Jan 2011 02:25:51 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Custom Provider User Keys 20110125022551A</guid></item><item><title>Updated Wiki: SQL Table Providers</title><link>http://altairiswebsecurity.codeplex.com/wikipage?title=SQL Table Providers&amp;version=4</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;SQL Table Providers&lt;/h1&gt;
The provider object model, as present in ASP.NET 2.0, is a great step forward from hand-coded behavior in ASP.NET 1.x. But the provider model is only as useful as are available providers. Microsoft .NET itself contains set of providers which can store their data in Microsoft SQL Server database: &lt;b&gt;SqlMembershipProvider&lt;/b&gt;, &lt;b&gt;SqlRoleProvider&lt;/b&gt; and &lt;b&gt;SqlProfileProvider&lt;/b&gt;. However, database structure used by these providers is pretty complicated and almost impossible to interconnect with your own tables etc.&lt;br /&gt;&lt;br /&gt;So I created set of my own providers, using very simple table structure. Some functionality of the original providers was lost, especially the ability to store data for several applications in single database. But the simple and straightforward database allows you to easily plug it into your existing infrastructure.&lt;br /&gt;
&lt;h2&gt;Features&lt;/h2&gt;
&lt;h3&gt;Simplicity, ability to connect to rest of database infrastructure&lt;/h3&gt;
The main goal of these providers is to use simple table structure, which can be easily connected to other database architecture using foreign keys etc. The tables used are also extendable, additional columns may be created, as long as they are nullable or have default values.&lt;br /&gt;
&lt;h3&gt;Database independence&lt;/h3&gt;
The providers are written to be database agnostic, as long as the database has ADO.NET provider and understands SQL and named parameters. Microsoft SQL Server and SQL Compact are the main target databases and the providers are tested to work with them. See the following links for setup instructions: 
&lt;ul&gt;&lt;li&gt;&lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=Microsoft%20SQL%20Server%20Support&amp;referringTitle=SQL%20Table%20Providers"&gt;Microsoft SQL Server Support&lt;/a&gt; (version 2005, 2008, 2008 R2, including Express editions) &lt;/li&gt;
&lt;li&gt;&lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=SQL%20Server%20Compact%20Support&amp;referringTitle=SQL%20Table%20Providers"&gt;SQL Server Compact Support&lt;/a&gt; (version 4.0)&lt;/li&gt;&lt;/ul&gt;

&lt;h3&gt;Account lockdown not supported&lt;/h3&gt;
The ASP.NET Membership infrastructure supports the account lockdown feature. After several failed login attempts, the account is disabled. In my eyes this feature offers great opportunity for denial of service attack directed to certain users - I can write a program which will repeatedly login with random passwords and deny access to legitimate users. Therefore the functionality is intentionally not implemented in the providers. use other way to protect your application from dictionary attacks.&lt;br /&gt;
&lt;h3&gt;Differences from Simple SQL Providers&lt;/h3&gt;
The first generation of providers was quite successful, so I retained the good bits, but the providers are basically rewritten from scratch, in new .NET 4.0.&lt;br /&gt;&lt;br /&gt;The new SQL Table providers have several additional features:
&lt;ul&gt;&lt;li&gt;For hashing, the standard HMACSHA512 class and algo are supported, instead of homebrew salting.&lt;/li&gt;
&lt;li&gt;Password hash and salt (or key, in HMAC terminology) are stored as binary database fields, not Base64-encoded strings.&lt;/li&gt;
&lt;li&gt;The int UserId column was dropped and UserName is now used as primary key instead.&lt;/li&gt;
&lt;li&gt;Implemented better tracking of user activity and now supporting the GetNumberOfUsersOnline method.&lt;/li&gt;
&lt;li&gt;Names of all tables are now configurable.&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;The downside of the new password hashing and storage is that there is no upgrade path from the Simple SQL Providers. You can upgrade easily, but the passwords are lost. So in case of upgrading, you need to notify your users and issue new passwords or use some kind of password reset mechanisms.&lt;br /&gt;
&lt;h2&gt;Configuring the providers in web.config&lt;/h2&gt;
To use the SQL Table providers, include the following settings in your &lt;b&gt;web.config&lt;/b&gt; file:&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;configuration&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;appSettings&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;connectionStrings&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;add&lt;/span&gt; &lt;span style="color:Red;"&gt;name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;TableAuthDB&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;providerName&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;System.Data.SqlClient&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;connectionString&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;...&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;connectionStrings&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;system.web&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;membership&lt;/span&gt; &lt;span style="color:Red;"&gt;defaultProvider&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;MyMembershipProvider&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;providers&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;clear&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;add&lt;/span&gt; &lt;span style="color:Red;"&gt;name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;MyMembershipProvider&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;
                     &lt;span style="color:Red;"&gt;type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Altairis.Web.Security.TableMembershipProvider, Altairis.Web.Security&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;
                     &lt;span style="color:Red;"&gt;connectionStringName&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;TableAuthDB&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;providers&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;membership&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;roleManager&lt;/span&gt; &lt;span style="color:Red;"&gt;enabled&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;true&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;defaultProvider&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;MyRoleProvider&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;providers&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;clear&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;add&lt;/span&gt; &lt;span style="color:Red;"&gt;name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;MyRoleProvider&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; 
                     &lt;span style="color:Red;"&gt;type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Altairis.Web.Security.TableRoleProvider, Altairis.Web.Security&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;
                     &lt;span style="color:Red;"&gt;connectionStringName&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;TableAuthDB&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;providers&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;roleManager&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;system.web&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;configuration&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;Configuring membership provider&lt;/h3&gt;
The following configuration attributes are supported:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Common for all membership providers:
&lt;ul&gt;&lt;li&gt;&lt;b&gt;applicationName&lt;/b&gt; (can be set, but is ignored)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;minRequiredNonAlphanumericCharacters&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;minRequiredPasswordLength&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;passwordStrengthRegularExpression&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;requiresUniqueEmail&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Specific for this provider:
&lt;ul&gt;&lt;li&gt;&lt;b&gt;connectionStringName&lt;/b&gt; - name of connection string defined in the &lt;i&gt;connectionStrings&lt;/i&gt; section to use for database connectivity.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;tableName&lt;/b&gt; - name of database table to store user information. Default is &lt;i&gt;Users&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;useEmailAddressAsUserName&lt;/b&gt; - when set to &lt;i&gt;true&lt;/i&gt;, user name is forced to be the same as e-mail address. The &lt;i&gt;requiresUniqueEmail&lt;/i&gt; attribute must be set to &lt;i&gt;true&lt;/i&gt; as well. By changing e-mail address, user name is changed too, which may cause interoperability problems, so use with caution. &lt;/li&gt;
&lt;li&gt;&lt;b&gt;userKeyType&lt;/b&gt; - allows specify &lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=Custom%20Provider%20User%20Keys&amp;referringTitle=SQL%20Table%20Providers"&gt;Custom Provider User Keys&lt;/a&gt;; may have following values:
&lt;ul&gt;&lt;li&gt;&lt;i&gt;UserName&lt;/i&gt; (default) - user name is used as provider user key&lt;/li&gt;
&lt;li&gt;&lt;i&gt;IntIdentity&lt;/i&gt; - integer generated by database backend (by means of IDENTITY clause or similar mechanism) is used as provider user key&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Guid&lt;/i&gt; - GUID is generated by membership prpvoder and used as key&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h3&gt;Configuring role provider&lt;/h3&gt;
The following configuration attributes are supported:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Common for all role providers:
&lt;ul&gt;&lt;li&gt;&lt;b&gt;applicationName&lt;/b&gt; (can be set, but is ignored)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Specific for this provider:
&lt;ul&gt;&lt;li&gt;&lt;b&gt;connectionStringName&lt;/b&gt; - name of connection string defined in the &lt;i&gt;connectionStrings&lt;/i&gt; section to use for database connectivity.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;rolesTableName&lt;/b&gt; - name of database table to store roles. Default is &lt;i&gt;Roles&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;roleMembershipsTableName&lt;/b&gt; - name of database table to store information about role members. Default is &lt;i&gt;RoleMemberships&lt;/i&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>altair</author><pubDate>Tue, 25 Jan 2011 02:13:25 GMT</pubDate><guid isPermaLink="false">Updated Wiki: SQL Table Providers 20110125021325A</guid></item><item><title>Updated Wiki: Home</title><link>http://altairiswebsecurity.codeplex.com/wikipage?version=15</link><description>&lt;div class="wikidoc"&gt;The &lt;b&gt;Altairis Web Security Toolkit&lt;/b&gt; consists of several parts:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=SQL%20Table%20Providers&amp;referringTitle=Home"&gt;SQL Table Providers&lt;/a&gt;&lt;/b&gt; are re-implementation of standard ASP.NET membership, profile and role providers, but using simple database structure.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=PlainTextMembershipProvider&amp;referringTitle=Home"&gt;PlainTextMembershipProvider&lt;/a&gt;&lt;/b&gt; is basic low-security membership provider using plain text file as its user database.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=BasicAuthenticationModule&amp;referringTitle=Home"&gt;BasicAuthenticationModule&lt;/a&gt;&lt;/b&gt; is authentication module for ASP.NET/IIS7, implementing standard HTTP Basic Authentication, working with any membership provider (including, but not limited to the two contained in this library)&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;The original release (older than 2.0) contained also &lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=Simple%20SQL%20Providers&amp;referringTitle=Home"&gt;Simple SQL Providers&lt;/a&gt;, which are no longer developed and were replaced by SQL Table Providers mentioned above. The relevant classes are still present in the assembly, but are now marked as obsolete.&lt;br /&gt;
&lt;h2&gt;Altairis Web Security toolkit is in the NuGet Gallery&lt;/h2&gt;
You may install Altairis Web Security Toolkit using the &lt;b&gt;NuGet package manager&lt;/b&gt; (former NuPack). The package name is &lt;i&gt;Altairis.Web.Security&lt;/i&gt;,&lt;br /&gt;&lt;br /&gt;For more info about NuGet visit &lt;a href="http://www.nuget.org" class="externalLink"&gt;http://www.nuget.org&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;
&lt;h2&gt;Database agnostic providers&lt;/h2&gt;
Since release &lt;a href="http://altairiswebsecurity.codeplex.com/releases/view/59664"&gt;2.2.0&lt;/a&gt; are the &lt;i&gt;TableMembershipProvider&lt;/i&gt; and &lt;i&gt;TableRoleProvider&lt;/i&gt; classes database agnostic. They should be working with any SQL database, for which an ADO.NET provider is available. Currently, SQL Server and SQL Compact 4.0 are tested to work. See the following links for setup instructions:
&lt;ul&gt;&lt;li&gt;&lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=Microsoft%20SQL%20Server%20Support&amp;referringTitle=Home"&gt;Microsoft SQL Server Support&lt;/a&gt; (version 2005, 2008, 2008 R2, including Express editions)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=SQL%20Server%20Compact%20Support&amp;referringTitle=Home"&gt;SQL Server Compact Support&lt;/a&gt; (version 4.0)&lt;/li&gt;&lt;/ul&gt;

&lt;h2&gt;Further information&lt;/h2&gt;
&lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=Author%20and%20contact&amp;referringTitle=Home"&gt;Author and contact&lt;/a&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>altair</author><pubDate>Sun, 23 Jan 2011 23:01:32 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20110123110132P</guid></item><item><title>Updated Wiki: SQL Table Providers</title><link>http://altairiswebsecurity.codeplex.com/wikipage?title=SQL Table Providers&amp;version=3</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;SQL Table Providers&lt;/h1&gt;
The provider object model, as present in ASP.NET 2.0, is a great step forward from hand-coded behavior in ASP.NET 1.x. But the provider model is only as useful as are available providers. Microsoft .NET itself contains set of providers which can store their data in Microsoft SQL Server database: &lt;b&gt;SqlMembershipProvider&lt;/b&gt;, &lt;b&gt;SqlRoleProvider&lt;/b&gt; and &lt;b&gt;SqlProfileProvider&lt;/b&gt;. However, database structure used by these providers is pretty complicated and almost impossible to interconnect with your own tables etc.&lt;br /&gt;&lt;br /&gt;So I created set of my own providers, using very simple table structure. Some functionality of the original providers was lost, especially the ability to store data for several applications in single database. But the simple and straightforward database allows you to easily plug it into your existing infrastructure.&lt;br /&gt;
&lt;h2&gt;Features&lt;/h2&gt;
&lt;h3&gt;Simplicity, ability to connect to rest of database infrastructure&lt;/h3&gt;
The main goal of these providers is to use simple table structure, which can be easily connected to other database architecture using foreign keys etc. The tables used are also extendable, additional columns may be created, as long as they are nullable or have default values.&lt;br /&gt;
&lt;h3&gt;Database independence&lt;/h3&gt;
The providers are written to be database agnostic, as long as the database has ADO.NET provider and understands SQL and named parameters. Microsoft SQL Server and SQL Compact are the main target databases and the providers are tested to work with them. See the following links for setup instructions: 
&lt;ul&gt;&lt;li&gt;&lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=Microsoft%20SQL%20Server%20Support&amp;referringTitle=SQL%20Table%20Providers"&gt;Microsoft SQL Server Support&lt;/a&gt; (version 2005, 2008, 2008 R2, including Express editions) &lt;/li&gt;
&lt;li&gt;&lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=SQL%20Server%20Compact%20Support&amp;referringTitle=SQL%20Table%20Providers"&gt;SQL Server Compact Support&lt;/a&gt; (version 4.0)&lt;/li&gt;&lt;/ul&gt;

&lt;h3&gt;Account lockdown not supported&lt;/h3&gt;
The ASP.NET Membership infrastructure supports the account lockdown feature. After several failed login attempts, the account is disabled. In my eyes this feature offers great opportunity for denial of service attack directed to certain users - I can write a program which will repeatedly login with random passwords and deny access to legitimate users. Therefore the functionality is intentionally not implemented in the providers. use other way to protect your application from dictionary attacks.&lt;br /&gt;
&lt;h3&gt;Differences from Simple SQL Providers&lt;/h3&gt;
The first generation of providers was quite successful, so I retained the good bits, but the providers are basically rewritten from scratch, in new .NET 4.0.&lt;br /&gt;&lt;br /&gt;The new SQL Table providers have several additional features:
&lt;ul&gt;&lt;li&gt;For hashing, the standard HMACSHA512 class and algo are supported, instead of homebrew salting.&lt;/li&gt;
&lt;li&gt;Password hash and salt (or key, in HMAC terminology) are stored as binary database fields, not Base64-encoded strings.&lt;/li&gt;
&lt;li&gt;The int UserId column was dropped and UserName is now used as primary key instead.&lt;/li&gt;
&lt;li&gt;Implemented better tracking of user activity and now supporting the GetNumberOfUsersOnline method.&lt;/li&gt;
&lt;li&gt;Names of all tables are now configurable.&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;The downside of the new password hashing and storage is that there is no upgrade path from the Simple SQL Providers. You can upgrade easily, but the passwords are lost. So in case of upgrading, you need to notify your users and issue new passwords or use some kind of password reset mechanisms.&lt;br /&gt;
&lt;h2&gt;Configuring the providers in web.config&lt;/h2&gt;
To use the SQL Table providers, include the following settings in your &lt;b&gt;web.config&lt;/b&gt; file:&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;configuration&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;appSettings&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;connectionStrings&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;add&lt;/span&gt; &lt;span style="color:Red;"&gt;name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;TableAuthDB&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;providerName&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;System.Data.SqlClient&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;connectionString&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;...&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;connectionStrings&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;system.web&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;membership&lt;/span&gt; &lt;span style="color:Red;"&gt;defaultProvider&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;MyMembershipProvider&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;providers&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;clear&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;add&lt;/span&gt; &lt;span style="color:Red;"&gt;name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;MyMembershipProvider&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;
                     &lt;span style="color:Red;"&gt;type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Altairis.Web.Security.TableMembershipProvider, Altairis.Web.Security&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;
                     &lt;span style="color:Red;"&gt;connectionStringName&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;TableAuthDB&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;providers&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;membership&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;roleManager&lt;/span&gt; &lt;span style="color:Red;"&gt;enabled&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;true&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;defaultProvider&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;MyRoleProvider&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;providers&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;clear&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;add&lt;/span&gt; &lt;span style="color:Red;"&gt;name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;MyRoleProvider&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; 
                     &lt;span style="color:Red;"&gt;type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Altairis.Web.Security.TableRoleProvider, Altairis.Web.Security&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;
                     &lt;span style="color:Red;"&gt;connectionStringName&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;TableAuthDB&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;providers&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;roleManager&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;system.web&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;configuration&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;Configuring membership provider&lt;/h3&gt;
The following configuration attributes are supported:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Common for all membership providers:
&lt;ul&gt;&lt;li&gt;&lt;b&gt;applicationName&lt;/b&gt; (can be set, but is ignored)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;minRequiredNonAlphanumericCharacters&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;minRequiredPasswordLength&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;passwordStrengthRegularExpression&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;requiresUniqueEmail&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Specific for this provider:
&lt;ul&gt;&lt;li&gt;&lt;b&gt;connectionStringName&lt;/b&gt; - name of connection string defined in the &lt;i&gt;connectionStrings&lt;/i&gt; section to use for database connectivity.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;tableName&lt;/b&gt; - name of database table to store user information. Default is &lt;i&gt;Users&lt;/i&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h3&gt;Configuring role provider&lt;/h3&gt;
The following configuration attributes are supported:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Common for all role providers:
&lt;ul&gt;&lt;li&gt;&lt;b&gt;applicationName&lt;/b&gt; (can be set, but is ignored)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Specific for this provider:
&lt;ul&gt;&lt;li&gt;&lt;b&gt;connectionStringName&lt;/b&gt; - name of connection string defined in the &lt;i&gt;connectionStrings&lt;/i&gt; section to use for database connectivity.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;rolesTableName&lt;/b&gt; - name of database table to store roles. Default is &lt;i&gt;Roles&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;roleMembershipsTableName&lt;/b&gt; - name of database table to store information about role members. Default is &lt;i&gt;RoleMemberships&lt;/i&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>altair</author><pubDate>Sun, 23 Jan 2011 22:43:56 GMT</pubDate><guid isPermaLink="false">Updated Wiki: SQL Table Providers 20110123104356P</guid></item><item><title>Updated Wiki: SQL Table Providers</title><link>http://altairiswebsecurity.codeplex.com/wikipage?title=SQL Table Providers&amp;version=2</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;SQL Table Providers&lt;/h1&gt;
The provider object model, as present in ASP.NET 2.0, is a great step forward from hand-coded behavior in ASP.NET 1.x. But the provider model is only as useful as are available providers. Microsoft .NET itself contains set of profiles which can store their data in Microsoft SQL Server database: &lt;b&gt;SqlMembershipProvider&lt;/b&gt;, &lt;b&gt;SqlRoleProvider&lt;/b&gt; and &lt;b&gt;SqlProfileProvider&lt;/b&gt;. However, database structure used by these providers is pretty complicated and almost impossible to interconnect with your own tables etc.&lt;br /&gt;&lt;br /&gt;So I created set of my own providers, using very simple table structure. Some functionality of the original providers was lost, especially the ability to store data for several applications in single database. But the simple and straightforward database allows you to easily plug it into your existing infrastructure.&lt;br /&gt;
&lt;h2&gt;Features&lt;/h2&gt;
&lt;h3&gt;Database independence&lt;/h3&gt;
The providers are written to be database agnostic, as long as the database has ADO.NET provider and understands SQL and named parameters. Microsoft SQL Server and SQL Compact are the main target databases and the providers are tested to work with them. See the following links for setup instructions: 
&lt;ul&gt;&lt;li&gt;&lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=Microsoft%20SQL%20Server%20Support&amp;referringTitle=SQL%20Table%20Providers"&gt;Microsoft SQL Server Support&lt;/a&gt; (version 2005, 2008, 2008 R2, including Express editions) &lt;/li&gt;
&lt;li&gt;&lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=SQL%20Server%20Compact%20Support&amp;referringTitle=SQL%20Table%20Providers"&gt;SQL Server Compact Support&lt;/a&gt; (version 4.0)&lt;/li&gt;&lt;/ul&gt;

&lt;h3&gt;Account lockdown not supported&lt;/h3&gt;
The ASP.NET Membership infrastructure supports the account lockdown feature. After several failed login attempts, the account is disabled. In my eyes this feature offers great opportunity for denial of service attack directed to certain users - I can write a program which will repeatedly login with random passwords and deny access to legitimate users. Therefore the functionality is intentionally not implemented in the providers. use other way to protect your application from dictionary attacks.&lt;br /&gt;
&lt;h3&gt;Differences from Simple SQL Providers&lt;/h3&gt;
The first generation of providers was quite successful, so I retained the good bits, but the providers are basically rewritten from scratch, in new .NET 4.0.&lt;br /&gt;&lt;br /&gt;The new SQL Table providers have several additional features:
&lt;ul&gt;&lt;li&gt;For hashing, the standard HMACSHA512 class and algo are supported, instead of homebrew salting.&lt;/li&gt;
&lt;li&gt;Password hash and salt (or key, in HMAC terminology) are stored as binary database fields, not Base64-encoded strings.&lt;/li&gt;
&lt;li&gt;The int UserId column was dropped and UserName is now used as primary key instead.&lt;/li&gt;
&lt;li&gt;Implemented better tracking of user activity and now supporting the GetNumberOfUsersOnline method.&lt;/li&gt;
&lt;li&gt;Names of all tables are now configurable.&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;The downside of the new password hashing and storage is that there is no upgrade path from the Simple SQL Providers. You can upgrade easily, but the passwords are lost. So in case of upgrading, you need to notify your users and issue new passwords or use some kind of password reset mechanisms.&lt;br /&gt;
&lt;h2&gt;Configuring the providers in web.config&lt;/h2&gt;
To use the SQL Table providers, include the following settings in your &lt;b&gt;web.config&lt;/b&gt; file:&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;configuration&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;appSettings&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;connectionStrings&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;add&lt;/span&gt; &lt;span style="color:Red;"&gt;name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;TableAuthDB&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;providerName&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;System.Data.SqlClient&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;connectionString&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;...&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;connectionStrings&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;system.web&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;membership&lt;/span&gt; &lt;span style="color:Red;"&gt;defaultProvider&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;MyMembershipProvider&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;providers&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;clear&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;add&lt;/span&gt; &lt;span style="color:Red;"&gt;name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;MyMembershipProvider&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;
                     &lt;span style="color:Red;"&gt;type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Altairis.Web.Security.TableMembershipProvider, Altairis.Web.Security&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;
                     &lt;span style="color:Red;"&gt;connectionStringName&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;TableAuthDB&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;providers&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;membership&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;roleManager&lt;/span&gt; &lt;span style="color:Red;"&gt;enabled&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;true&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;defaultProvider&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;MyRoleProvider&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;providers&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;clear&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;add&lt;/span&gt; &lt;span style="color:Red;"&gt;name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;MyRoleProvider&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; 
                     &lt;span style="color:Red;"&gt;type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Altairis.Web.Security.TableRoleProvider, Altairis.Web.Security&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;
                     &lt;span style="color:Red;"&gt;connectionStringName&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;TableAuthDB&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;providers&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;roleManager&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;system.web&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;configuration&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;Configuring membership provider&lt;/h3&gt;
The following configuration attributes are supported:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Common for all membership providers:
&lt;ul&gt;&lt;li&gt;&lt;b&gt;applicationName&lt;/b&gt; (can be set, but is ignored)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;minRequiredNonAlphanumericCharacters&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;minRequiredPasswordLength&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;passwordStrengthRegularExpression&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;requiresUniqueEmail&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Specific for this provider:
&lt;ul&gt;&lt;li&gt;&lt;b&gt;connectionStringName&lt;/b&gt; - name of connection string defined in the &lt;i&gt;connectionStrings&lt;/i&gt; section to use for database connectivity.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;tableName&lt;/b&gt; - name of database table to store user information. Default is &lt;i&gt;Users&lt;/i&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h3&gt;Configuring role provider&lt;/h3&gt;
The following configuration attributes are supported:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Common for all role providers:
&lt;ul&gt;&lt;li&gt;&lt;b&gt;applicationName&lt;/b&gt; (can be set, but is ignored)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Specific for this provider:
&lt;ul&gt;&lt;li&gt;&lt;b&gt;connectionStringName&lt;/b&gt; - name of connection string defined in the &lt;i&gt;connectionStrings&lt;/i&gt; section to use for database connectivity.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;rolesTableName&lt;/b&gt; - name of database table to store roles. Default is &lt;i&gt;Roles&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;roleMembershipsTableName&lt;/b&gt; - name of database table to store information about role members. Default is &lt;i&gt;RoleMemberships&lt;/i&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>altair</author><pubDate>Sun, 23 Jan 2011 22:31:48 GMT</pubDate><guid isPermaLink="false">Updated Wiki: SQL Table Providers 20110123103148P</guid></item><item><title>Updated Wiki: Microsoft SQL Server Support</title><link>http://altairiswebsecurity.codeplex.com/wikipage?title=Microsoft SQL Server Support&amp;version=1</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Microsoft SQL Server Support&lt;/h1&gt;
You may use Microsoft SQL Server as database for &lt;b&gt;TableMembershipProvider&lt;/b&gt; and &lt;b&gt;TableRoleProvider&lt;/b&gt;. Any version and edition of Microsoft SQL Server should work, tested versions are 2005, 2008 and 2008 R2. &lt;br /&gt;
&lt;h2&gt;Database setup&lt;/h2&gt;
You need to create tables, based on what providers you want to use&lt;br /&gt;
&lt;h3&gt;Membership provider&lt;/h3&gt;
Single table (by default named &lt;b&gt;Users&lt;/b&gt;) is required by membership provider. Use the following SQL code to create it:&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;CREATE&lt;/span&gt; &lt;span style="color:Blue;"&gt;TABLE&lt;/span&gt; dbo.Users (
    UserName                &lt;span style="color:Blue;"&gt;nvarchar&lt;/span&gt;(100)  &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    PasswordHash            &lt;span style="color:Blue;"&gt;binary&lt;/span&gt;(64)     &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    PasswordSalt            &lt;span style="color:Blue;"&gt;binary&lt;/span&gt;(128)    &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    Email                   &lt;span style="color:Blue;"&gt;nvarchar&lt;/span&gt;(&lt;span style="color:Magenta;"&gt;max&lt;/span&gt;)  &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    Comment                 &lt;span style="color:Blue;"&gt;nvarchar&lt;/span&gt;(&lt;span style="color:Magenta;"&gt;max&lt;/span&gt;)  &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    IsApproved              &lt;span style="color:Blue;"&gt;bit&lt;/span&gt;            &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    DateCreated             &lt;span style="color:Blue;"&gt;datetime&lt;/span&gt;       &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    DateLastLogin           &lt;span style="color:Blue;"&gt;datetime&lt;/span&gt;       &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    DateLastActivity        &lt;span style="color:Blue;"&gt;datetime&lt;/span&gt;       &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    DateLastPasswordChange  &lt;span style="color:Blue;"&gt;datetime&lt;/span&gt;       &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    &lt;span style="color:Blue;"&gt;CONSTRAINT&lt;/span&gt; PK_Users &lt;span style="color:Blue;"&gt;PRIMARY&lt;/span&gt; &lt;span style="color:Blue;"&gt;KEY&lt;/span&gt; &lt;span style="color:Blue;"&gt;CLUSTERED&lt;/span&gt; (UserName)
)
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;You may add other columns needed by your application, as long as they are either nullable or have defaults assigned. The membership provider would not touch them.&lt;br /&gt;
&lt;h3&gt;Role provider&lt;/h3&gt;
Role provider requires two tables. First (called &lt;b&gt;Roles&lt;/b&gt; by default) contains the role definitions. Second (called &lt;b&gt;RoleMemberships&lt;/b&gt; by default) contains which users are members of which roles. Use the following SQL code to create the two tables:&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;CREATE&lt;/span&gt; &lt;span style="color:Blue;"&gt;TABLE&lt;/span&gt; dbo.Roles (
    RoleName                &lt;span style="color:Blue;"&gt;nvarchar&lt;/span&gt;(100)  &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    &lt;span style="color:Blue;"&gt;CONSTRAINT&lt;/span&gt; PK_Roles &lt;span style="color:Blue;"&gt;PRIMARY&lt;/span&gt; &lt;span style="color:Blue;"&gt;KEY&lt;/span&gt; &lt;span style="color:Blue;"&gt;CLUSTERED&lt;/span&gt; (RoleName)
)
&lt;span style="color:Blue;"&gt;CREATE&lt;/span&gt; &lt;span style="color:Blue;"&gt;TABLE&lt;/span&gt; dbo.RoleMemberships (
    UserName                &lt;span style="color:Blue;"&gt;nvarchar&lt;/span&gt;(100)  &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    RoleName                &lt;span style="color:Blue;"&gt;nvarchar&lt;/span&gt;(100)  &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    &lt;span style="color:Blue;"&gt;CONSTRAINT&lt;/span&gt; PK_RoleMemberships &lt;span style="color:Blue;"&gt;PRIMARY&lt;/span&gt; &lt;span style="color:Blue;"&gt;KEY&lt;/span&gt; &lt;span style="color:Blue;"&gt;CLUSTERED&lt;/span&gt; (UserName, RoleName),
    &lt;span style="color:Blue;"&gt;CONSTRAINT&lt;/span&gt; FK_RoleMemberships_Roles 
        &lt;span style="color:Blue;"&gt;FOREIGN&lt;/span&gt; &lt;span style="color:Blue;"&gt;KEY&lt;/span&gt; (RoleName) &lt;span style="color:Blue;"&gt;REFERENCES&lt;/span&gt; dbo.Roles (RoleName) 
        &lt;span style="color:Blue;"&gt;ON&lt;/span&gt; &lt;span style="color:Blue;"&gt;UPDATE&lt;/span&gt; &lt;span style="color:Blue;"&gt;CASCADE&lt;/span&gt; &lt;span style="color:Blue;"&gt;ON&lt;/span&gt; &lt;span style="color:Blue;"&gt;DELETE&lt;/span&gt; &lt;span style="color:Blue;"&gt;CASCADE&lt;/span&gt;,
)
&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;Using membership and role providers together&lt;/h3&gt;
The membership and role providers are totally independent and can be combined with any other providers. However, if you use both the &lt;b&gt;TableMembershipProvider&lt;/b&gt; and &lt;b&gt;TableRoleProvider&lt;/b&gt;, you might want to add foreign key constraint between their tables, so when you delete the user, its role mappings are deleted as well:&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;ALTER&lt;/span&gt; &lt;span style="color:Blue;"&gt;TABLE&lt;/span&gt; dbo.RoleMemberships 
    &lt;span style="color:Blue;"&gt;ADD&lt;/span&gt; &lt;span style="color:Blue;"&gt;CONSTRAINT&lt;/span&gt; FK_RoleMemberships_Users 
    &lt;span style="color:Blue;"&gt;FOREIGN&lt;/span&gt; &lt;span style="color:Blue;"&gt;KEY&lt;/span&gt; (UserName) &lt;span style="color:Blue;"&gt;REFERENCES&lt;/span&gt; dbo.Users (UserName) 
    &lt;span style="color:Blue;"&gt;ON&lt;/span&gt; &lt;span style="color:Blue;"&gt;UPDATE&lt;/span&gt; &lt;span style="color:Blue;"&gt;CASCADE&lt;/span&gt; &lt;span style="color:Blue;"&gt;ON&lt;/span&gt; &lt;span style="color:Blue;"&gt;DELETE&lt;/span&gt; &lt;span style="color:Blue;"&gt;CASCADE&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>altair</author><pubDate>Sun, 23 Jan 2011 22:28:58 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Microsoft SQL Server Support 20110123102858P</guid></item><item><title>Updated Wiki: Home</title><link>http://altairiswebsecurity.codeplex.com/wikipage?version=14</link><description>&lt;div class="wikidoc"&gt;The &lt;b&gt;Altairis Web Security Toolkit&lt;/b&gt; consists of several parts:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=SQL%20Table%20Providers&amp;referringTitle=Home"&gt;SQL Table Providers&lt;/a&gt;&lt;/b&gt; are re-implementation of standard ASP.NET membership, profile and role providers, but using simple database structure.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=PlainTextMembershipProvider&amp;referringTitle=Home"&gt;PlainTextMembershipProvider&lt;/a&gt;&lt;/b&gt; is basic low-security membership provider using plain text file as its user database.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=BasicAuthenticationModule&amp;referringTitle=Home"&gt;BasicAuthenticationModule&lt;/a&gt;&lt;/b&gt; is authentication module for ASP.NET/IIS7, implementing standard HTTP Basic Authentication, working with any membership provider (including, but not limited to the two contained in this library)&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;The original release (older than 2.0) contained also &lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=Simple%20SQL%20Providers&amp;referringTitle=Home"&gt;Simple SQL Providers&lt;/a&gt;, which are no longer developed and were replaced by SQL Table Providers mentioned above.&lt;br /&gt;
&lt;h2&gt;Altairis Web Security toolkit is in the NuGet Gallery&lt;/h2&gt;
You may install Altairis Web Security Toolkit using the &lt;b&gt;NuGet package manager&lt;/b&gt; (former NuPack). The package name is &lt;i&gt;Altairis.Web.Security&lt;/i&gt;,&lt;br /&gt;&lt;br /&gt;For more info about NuGet visit &lt;a href="http://www.nuget.org" class="externalLink"&gt;http://www.nuget.org&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;
&lt;h2&gt;Database agnostic providers&lt;/h2&gt;
Since release &lt;a href="http://altairiswebsecurity.codeplex.com/releases/view/59664"&gt;2.2.0&lt;/a&gt; are the &lt;i&gt;TableMembershipProvider&lt;/i&gt; and &lt;i&gt;TableRoleProvider&lt;/i&gt; classes database agnostic. They should be working with any SQL database, for which an ADO.NET provider is available. Currently, SQL Server and SQL Compact 4.0 are tested to work. See the following links for setup instructions:
&lt;ul&gt;&lt;li&gt;&lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=Microsoft%20SQL%20Server%20Support&amp;referringTitle=Home"&gt;Microsoft SQL Server Support&lt;/a&gt; (version 2005, 2008, 2008 R2, including Express editions)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=SQL%20Server%20Compact%20Support&amp;referringTitle=Home"&gt;SQL Server Compact Support&lt;/a&gt; (version 4.0)&lt;/li&gt;&lt;/ul&gt;

&lt;h2&gt;Further information&lt;/h2&gt;
&lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=Author%20and%20contact&amp;referringTitle=Home"&gt;Author and contact&lt;/a&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>altair</author><pubDate>Sun, 23 Jan 2011 22:11:09 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20110123101109P</guid></item><item><title>New Comment on "SQL Table Providers"</title><link>http://altairiswebsecurity.codeplex.com/wikipage?title=SQL Table Providers&amp;ANCHOR#C18212</link><description>never mind I see it is in the &amp;#34;SimpleSqlSample&amp;#34; of the download, thanks</description><author>selarom</author><pubDate>Tue, 11 Jan 2011 18:05:04 GMT</pubDate><guid isPermaLink="false">New Comment on "SQL Table Providers" 20110111060504P</guid></item><item><title>New Comment on "SQL Table Providers"</title><link>http://altairiswebsecurity.codeplex.com/wikipage?title=SQL Table Providers&amp;ANCHOR#C18211</link><description>What about setting up profile providers&amp;#63; how is this done&amp;#63;</description><author>selarom</author><pubDate>Tue, 11 Jan 2011 18:02:41 GMT</pubDate><guid isPermaLink="false">New Comment on "SQL Table Providers" 20110111060241P</guid></item><item><title>Updated Wiki: Home</title><link>http://altairiswebsecurity.codeplex.com/wikipage?version=13</link><description>&lt;div class="wikidoc"&gt;The &lt;b&gt;Altairis Web Security Toolkit&lt;/b&gt; consists of several parts:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=SQL%20Table%20Providers&amp;referringTitle=Home"&gt;SQL Table Providers&lt;/a&gt;&lt;/b&gt; are re-implementation of standard ASP.NET membership, profile and role providers, but using simple database structure.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=PlainTextMembershipProvider&amp;referringTitle=Home"&gt;PlainTextMembershipProvider&lt;/a&gt;&lt;/b&gt; is basic low-security membership provider using plain text file as its user database.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=BasicAuthenticationModule&amp;referringTitle=Home"&gt;BasicAuthenticationModule&lt;/a&gt;&lt;/b&gt; is authentication module for ASP.NET/IIS7, implementing standard HTTP Basic Authentication, working with any membership provider (including, but not limited to the two contained in this library)&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;The original release (older than 2.0) contained also &lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=Simple%20SQL%20Providers&amp;referringTitle=Home"&gt;Simple SQL Providers&lt;/a&gt;, which are no longer developed and were replaced by SQL Table Providers mentioned above.&lt;br /&gt;
&lt;h2&gt;Altairis Web Security toolkit is in the official NuGet feed&lt;/h2&gt;
You may install Altairis Web Security Toolkit using the &lt;b&gt;NuGet package manager&lt;/b&gt; (former NuPack). The package name is &lt;i&gt;Altairis.Web.Security&lt;/i&gt;,&lt;br /&gt;&lt;br /&gt;For more info about NuGet visit &lt;a href="http://nuget.codeplex.com" class="externalLink"&gt;http://nuget.codeplex.com&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;
&lt;h2&gt;Beta support for Microsoft SQL Server Compact Edition&lt;/h2&gt;
The latest beta release (&lt;a href="http://altairiswebsecurity.codeplex.com/releases/view/58099"&gt;2.1.0.0&lt;/a&gt;) adds experimental support for the Microsoft SQL Server Compact Edition (SQL CE 4.0) to be used for storage. See wiki page &lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=SQL%20Server%20Compact%20Support&amp;referringTitle=Home"&gt;SQL Server Compact Support&lt;/a&gt; for more information about using SQL CE for membership.&lt;br /&gt;
&lt;h2&gt;Further information&lt;/h2&gt;
&lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=Author%20and%20contact&amp;referringTitle=Home"&gt;Author and contact&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>altair</author><pubDate>Thu, 30 Dec 2010 15:06:35 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20101230030635P</guid></item><item><title>Updated Wiki: Home</title><link>http://altairiswebsecurity.codeplex.com/wikipage?version=12</link><description>&lt;div class="wikidoc"&gt;The &lt;b&gt;Altairis Web Security Toolkit&lt;/b&gt; consists of several parts:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=SQL%20Table%20Providers&amp;referringTitle=Home"&gt;SQL Table Providers&lt;/a&gt;&lt;/b&gt; are re-implementation of standard ASP.NET membership, profile and role providers, but using simple database structure.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=PlainTextMembershipProvider&amp;referringTitle=Home"&gt;PlainTextMembershipProvider&lt;/a&gt;&lt;/b&gt; is basic low-security membership provider using plain text file as its user database.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=BasicAuthenticationModule&amp;referringTitle=Home"&gt;BasicAuthenticationModule&lt;/a&gt;&lt;/b&gt; is authentication module for ASP.NET/IIS7, implementing standard HTTP Basic Authentication, working with any membership provider (including, but not limited to the two contained in this library)&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;The original release (older than 2.0) contained also &lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=Simple%20SQL%20Providers&amp;referringTitle=Home"&gt;Simple SQL Providers&lt;/a&gt;, which are no longer developed and were replaced by SQL Table Providers mentioned above.&lt;br /&gt;
&lt;h2&gt;Beta support for Microsoft SQL Server Compact Edition&lt;/h2&gt;
The latest beta release (&lt;a href="http://altairiswebsecurity.codeplex.com/releases/view/58099"&gt;2.1.0.0&lt;/a&gt;) adds experimental support for the Microsoft SQL Server Compact Edition (SQL CE 4.0) to be used for storage. See wiki page &lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=SQL%20Server%20Compact%20Support&amp;referringTitle=Home"&gt;SQL Server Compact Support&lt;/a&gt; for more information about using SQL CE for membership.&lt;br /&gt;
&lt;h2&gt;Further information&lt;/h2&gt;
&lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=Author%20and%20contact&amp;referringTitle=Home"&gt;Author and contact&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>altair</author><pubDate>Sat, 25 Dec 2010 23:29:22 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20101225112922P</guid></item><item><title>Updated Wiki: Home</title><link>http://altairiswebsecurity.codeplex.com/wikipage?version=11</link><description>&lt;div class="wikidoc"&gt;The &lt;b&gt;Altairis Web Security Toolkit&lt;/b&gt; consists of several parts:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=SQL%20Table%20Providers&amp;referringTitle=Home"&gt;SQL Table Providers&lt;/a&gt;&lt;/b&gt; are re-implementation of standard ASP.NET membership, profile and role providers, but using simple database structure.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=PlainTextMembershipProvider&amp;referringTitle=Home"&gt;PlainTextMembershipProvider&lt;/a&gt;&lt;/b&gt; is basic low-security membership provider using plain text file as its user database.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=BasicAuthenticationModule&amp;referringTitle=Home"&gt;BasicAuthenticationModule&lt;/a&gt;&lt;/b&gt; is authentication module for ASP.NET/IIS7, implementing standard HTTP Basic Authentication, woring with any membership provider (including, but not limited to the two contained in this library)&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;The original release (older than 2.0) contained also &lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=Simple%20SQL%20Providers&amp;referringTitle=Home"&gt;Simple SQL Providers&lt;/a&gt;, which are no longer developed and were replaced by SQL Table Providers mentioned above.&lt;br /&gt;
&lt;h2&gt;Beta support for Microsoft SQL Server Compact Edition&lt;/h2&gt;
The latest beta release (&lt;a href="http://altairiswebsecurity.codeplex.com/releases/view/58099"&gt;2.1.0.0&lt;/a&gt;) adds experimental support for the Microsoft SQL Server Compact Edition (SQL CE 4.0) to be used for storage. See wiki page &lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=SQL%20Server%20Compact%20Support&amp;referringTitle=Home"&gt;SQL Server Compact Support&lt;/a&gt; for more information about using SQL CE for membership.&lt;br /&gt;
&lt;h2&gt;Further information&lt;/h2&gt;
&lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=Author%20and%20contact&amp;referringTitle=Home"&gt;Author and contact&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>altair</author><pubDate>Sat, 25 Dec 2010 22:40:10 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20101225104010P</guid></item><item><title>Updated Wiki: SQL Server Compact Support</title><link>http://altairiswebsecurity.codeplex.com/wikipage?title=SQL Server Compact Support&amp;version=1</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;SQL Server Compact Support &lt;/h1&gt;
The Compact Edition of Microsoft SQL Server is embedded database, which can serve as lightweight database server for smaller applications. The new version 4.0 (in CTP stage at time of writing) supports the ASP.NET web applications (unlike the previous versions).&lt;br /&gt;&lt;br /&gt;The &lt;b&gt;TableMembershipProvider&lt;/b&gt; and &lt;b&gt;TableRoleProvider&lt;/b&gt; classes in this release support SQL CE as their data store.&lt;br /&gt;
&lt;h2&gt;Creating the SDF file&lt;/h2&gt;
The SQL Compact database lives in .sdf file. Right now it&amp;#39;s quite tricky to create SQL CE 4.0 sdf files, because of limited tooling support. There are third-party tools (like &lt;a href="http://sqlcetoolbox.codeplex.com/" class="externalLink"&gt;SQL CE Toolbox&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. Service Pack 1 for Visual Studio 2010 will add supprt to VS 2010 and you can also manage SDF files with WebMatrix.&lt;br /&gt;&lt;br /&gt;The source includes SDF file with empty tables in &lt;i&gt;/trunk/Altairis.Web.Security/Resources/TableProvidersCE.sdf&lt;/i&gt;. You can also use the following SQL commands to create the required tables (please note that you must run only one command at a time, as SQL CE does not understand batches):&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Green;"&gt;-- Table for TableMembershipProvider&lt;/span&gt;
&lt;span style="color:Blue;"&gt;CREATE&lt;/span&gt; &lt;span style="color:Blue;"&gt;TABLE&lt;/span&gt; Users (
    UserName                &lt;span style="color:Blue;"&gt;nvarchar&lt;/span&gt;(100)   &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    PasswordHash            &lt;span style="color:Blue;"&gt;binary&lt;/span&gt;(64)      &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    PasswordSalt            &lt;span style="color:Blue;"&gt;binary&lt;/span&gt;(128)     &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    Email                   &lt;span style="color:Blue;"&gt;nvarchar&lt;/span&gt;(100)   &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    Comment                 &lt;span style="color:Blue;"&gt;nvarchar&lt;/span&gt;(4000)  &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    IsApproved              &lt;span style="color:Blue;"&gt;bit&lt;/span&gt;             &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    DateCreated             &lt;span style="color:Blue;"&gt;datetime&lt;/span&gt;        &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    DateLastLogin           &lt;span style="color:Blue;"&gt;datetime&lt;/span&gt;        &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    DateLastActivity        &lt;span style="color:Blue;"&gt;datetime&lt;/span&gt;        &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    DateLastPasswordChange  &lt;span style="color:Blue;"&gt;datetime&lt;/span&gt;        &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    &lt;span style="color:Blue;"&gt;CONSTRAINT&lt;/span&gt; PK_Users &lt;span style="color:Blue;"&gt;PRIMARY&lt;/span&gt; &lt;span style="color:Blue;"&gt;KEY&lt;/span&gt; (UserName)
)

&lt;span style="color:Green;"&gt;-- Tables for TableRoleProvider&lt;/span&gt;
&lt;span style="color:Blue;"&gt;CREATE&lt;/span&gt; &lt;span style="color:Blue;"&gt;TABLE&lt;/span&gt; Roles (
    RoleName                &lt;span style="color:Blue;"&gt;nvarchar&lt;/span&gt;(100)    &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    &lt;span style="color:Blue;"&gt;CONSTRAINT&lt;/span&gt; PK_Roles &lt;span style="color:Blue;"&gt;PRIMARY&lt;/span&gt; &lt;span style="color:Blue;"&gt;KEY&lt;/span&gt; (RoleName)
)
&lt;span style="color:Blue;"&gt;CREATE&lt;/span&gt; &lt;span style="color:Blue;"&gt;TABLE&lt;/span&gt; RoleMemberships (
    UserName                &lt;span style="color:Blue;"&gt;nvarchar&lt;/span&gt;(100)    &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    RoleName                &lt;span style="color:Blue;"&gt;nvarchar&lt;/span&gt;(100)    &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    &lt;span style="color:Blue;"&gt;CONSTRAINT&lt;/span&gt; PK_RoleMemberships &lt;span style="color:Blue;"&gt;PRIMARY&lt;/span&gt; &lt;span style="color:Blue;"&gt;KEY&lt;/span&gt; (UserName, RoleName),
    &lt;span style="color:Blue;"&gt;CONSTRAINT&lt;/span&gt; FK_RoleMemberships_Roles &lt;span style="color:Blue;"&gt;FOREIGN&lt;/span&gt; &lt;span style="color:Blue;"&gt;KEY&lt;/span&gt; (RoleName) 
        &lt;span style="color:Blue;"&gt;REFERENCES&lt;/span&gt; Roles (RoleName) &lt;span style="color:Blue;"&gt;ON&lt;/span&gt; &lt;span style="color:Blue;"&gt;UPDATE&lt;/span&gt; &lt;span style="color:Blue;"&gt;CASCADE&lt;/span&gt; &lt;span style="color:Blue;"&gt;ON&lt;/span&gt; &lt;span style="color:Blue;"&gt;DELETE&lt;/span&gt; &lt;span style="color:Blue;"&gt;CASCADE&lt;/span&gt;
)

&lt;span style="color:Green;"&gt;-- When using both these providers together, you may want to add the foreign key&lt;/span&gt;
&lt;span style="color:Blue;"&gt;ALTER&lt;/span&gt; &lt;span style="color:Blue;"&gt;TABLE&lt;/span&gt; RoleMemberships 
    &lt;span style="color:Blue;"&gt;ADD&lt;/span&gt; &lt;span style="color:Blue;"&gt;CONSTRAINT&lt;/span&gt; FK_RoleMemberships_Users &lt;span style="color:Blue;"&gt;FOREIGN&lt;/span&gt; &lt;span style="color:Blue;"&gt;KEY&lt;/span&gt; (UserName)
    &lt;span style="color:Blue;"&gt;REFERENCES&lt;/span&gt; Users (UserName) &lt;span style="color:Blue;"&gt;ON&lt;/span&gt; &lt;span style="color:Blue;"&gt;UPDATE&lt;/span&gt; &lt;span style="color:Blue;"&gt;CASCADE&lt;/span&gt; &lt;span style="color:Blue;"&gt;ON&lt;/span&gt; &lt;span style="color:Blue;"&gt;DELETE&lt;/span&gt; &lt;span style="color:Blue;"&gt;CASCADE&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;Configuring providers to use database&lt;/h2&gt;
No special configuration is needed. The only requirement is to set &lt;i&gt;providerName&lt;/i&gt; attribute of connection string to &lt;i&gt;System.Data.SqlServerCe.4.0&lt;/i&gt;. The library will use the right provider based on this. You must also reference the &lt;br /&gt;&lt;br /&gt;See sample web.config file for using SQL CE database:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#A31515;"&gt;xml&lt;/span&gt; &lt;span style="color:Red;"&gt;version&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;1.0&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;?&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;configuration&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;appSettings&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;connectionStrings&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;add&lt;/span&gt; &lt;span style="color:Red;"&gt;name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;TableAuthDB&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; 
             &lt;span style="color:Red;"&gt;providerName&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;System.Data.SqlServerCe.4.0&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; 
             &lt;span style="color:Red;"&gt;connectionString&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Data Source=|DataDirectory|TableAuthDB.sdf&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;connectionStrings&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Green;"&gt;&amp;lt;!-- No furhter changes required, common provider configuration included for reference  --&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;system.web&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;membership&lt;/span&gt; &lt;span style="color:Red;"&gt;defaultProvider&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;MyMembershipProvider&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;providers&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;clear&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;add&lt;/span&gt; &lt;span style="color:Red;"&gt;name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;MyMembershipProvider&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;
                     &lt;span style="color:Red;"&gt;type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Altairis.Web.Security.TableMembershipProvider, Altairis.Web.Security&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; 
                     &lt;span style="color:Red;"&gt;connectionStringName&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;TableAuthDB&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;providers&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;membership&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;roleManager&lt;/span&gt; &lt;span style="color:Red;"&gt;enabled&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;true&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;defaultProvider&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;MyRoleProvider&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;providers&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;clear&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;add&lt;/span&gt; &lt;span style="color:Red;"&gt;name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;MyRoleProvider&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; 
                     &lt;span style="color:Red;"&gt;type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Altairis.Web.Security.TableRoleProvider, Altairis.Web.Security&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; 
                     &lt;span style="color:Red;"&gt;connectionStringName&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;TableAuthDB&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;providers&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;roleManager&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;system.web&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;configuration&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;Sample&lt;/h2&gt;
The download includes example &lt;b&gt;TableProviderSampleCE&lt;/b&gt;, which is similar to &lt;b&gt;TableProviderSample&lt;/b&gt;, just uses the SQL CE instead of SQL Server.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>altair</author><pubDate>Sat, 25 Dec 2010 22:18:34 GMT</pubDate><guid isPermaLink="false">Updated Wiki: SQL Server Compact Support 20101225101834P</guid></item><item><title>Updated Wiki: SQL Table Providers</title><link>http://altairiswebsecurity.codeplex.com/wikipage?title=SQL Table Providers&amp;version=1</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;SQL Table Providers&lt;/h1&gt;
The provider object model, as present in ASP.NET 2.0, is a great step forward from hand-coded behavior in ASP.NET 1.x. But the provider model is only as useful as are available providers. Microsoft .NET itself contains set of profiles which can store their data in Microsoft SQL Server database: &lt;b&gt;SqlMembershipProvider&lt;/b&gt;, &lt;b&gt;SqlRoleProvider&lt;/b&gt; and &lt;b&gt;SqlProfileProvider&lt;/b&gt;. However, database structure used by these providers is pretty complicated and almost impossible to interconnect with your own tables etc.&lt;br /&gt;&lt;br /&gt;So I created set of my own providers, using very simple table structure. Some functionality of the original providers was lost, especially the ability to store data for several applications in single database. But the simple and straightforward database allows you to easily plug it into your existing infrastructure.&lt;br /&gt;
&lt;h2&gt;Features&lt;/h2&gt;
&lt;h3&gt;Database independence&lt;/h3&gt;
At this time, the providers are written for Microsoft SQL Server 2005 and above. But the way code is written allows easy support for other databases, as long as they understand SQL and named parameters. &lt;br /&gt;&lt;br /&gt;Version 2.1 will support SQL Server Compact 4.0 (currently in CTP). If you wish to add support for other databases, feel free to do so and drop me a line, so I can merge it to main branch.&lt;br /&gt;
&lt;h3&gt;Account lockdown not supported&lt;/h3&gt;
The ASP.NET Membership infrastructure supports the account lockdown feature. After several failed login attempts, the account is disabled. In my eyes this feature offers great opportunity for denial of service attack directed to certain users - I can write a program which will repeatedly login with random passwords and deny access to legitimate users. Therefore the functionality is intentionally not implemented in the providers. use other way to protect your application from dictionary attacks.&lt;br /&gt;
&lt;h3&gt;Differences from Simple SQL Providers&lt;/h3&gt;
The first generation of providers was quite successful, so I retained the good bits, but the providers are basically rewritten from scratch, in new .NET 4.0.&lt;br /&gt;&lt;br /&gt;The new SQL Table providers have several additional features:
&lt;ul&gt;&lt;li&gt;For hashing, the standard HMACSHA512 class and algo are supported, instead of homebrew salting.&lt;/li&gt;
&lt;li&gt;Password hash and salt (or key, in HMAC terminology) are stored as binary database fields, not Base64-encoded strings.&lt;/li&gt;
&lt;li&gt;The int UserId column was dropped and UserName is now used as primary key instead.&lt;/li&gt;
&lt;li&gt;Implemented better tracking of user activity and now supporting the GetNumberOfUsersOnline method.&lt;/li&gt;
&lt;li&gt;Names of all tables are now configurable.&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;The downside of the new password hashing and storage is that there is no upgrade path from the Simple SQL Providers. You can upgrade easily, but the passwords are lost. So in case of upgrading, you need to notify your users and issue new passwords or use some kind of password reset mechanisms.&lt;br /&gt;
&lt;h2&gt;Database setup&lt;/h2&gt;
&lt;h3&gt;Membership provider&lt;/h3&gt;
Single table (by default named &lt;b&gt;Users&lt;/b&gt;) is required by membership provider. Use the following SQL code to create it:&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;CREATE&lt;/span&gt; &lt;span style="color:Blue;"&gt;TABLE&lt;/span&gt; dbo.Users (
    UserName                &lt;span style="color:Blue;"&gt;nvarchar&lt;/span&gt;(100)  &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    PasswordHash            &lt;span style="color:Blue;"&gt;binary&lt;/span&gt;(64)     &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    PasswordSalt            &lt;span style="color:Blue;"&gt;binary&lt;/span&gt;(128)    &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    Email                   &lt;span style="color:Blue;"&gt;nvarchar&lt;/span&gt;(&lt;span style="color:Magenta;"&gt;max&lt;/span&gt;)  &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    Comment                 &lt;span style="color:Blue;"&gt;nvarchar&lt;/span&gt;(&lt;span style="color:Magenta;"&gt;max&lt;/span&gt;)  &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    IsApproved              &lt;span style="color:Blue;"&gt;bit&lt;/span&gt;            &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    DateCreated             &lt;span style="color:Blue;"&gt;datetime&lt;/span&gt;       &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    DateLastLogin           &lt;span style="color:Blue;"&gt;datetime&lt;/span&gt;       &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    DateLastActivity        &lt;span style="color:Blue;"&gt;datetime&lt;/span&gt;       &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    DateLastPasswordChange  &lt;span style="color:Blue;"&gt;datetime&lt;/span&gt;       &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    &lt;span style="color:Blue;"&gt;CONSTRAINT&lt;/span&gt; PK_Users &lt;span style="color:Blue;"&gt;PRIMARY&lt;/span&gt; &lt;span style="color:Blue;"&gt;KEY&lt;/span&gt; &lt;span style="color:Blue;"&gt;CLUSTERED&lt;/span&gt; (UserName)
)
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;You may add other columns needed by your application, as long as they are either nullable or have defaults assigned. The membership provider would not touch them.&lt;br /&gt;
&lt;h3&gt;Role provider&lt;/h3&gt;
Role provider requires two tables. First (called &lt;b&gt;Roles&lt;/b&gt; by default) contains the role definitions. Second (called &lt;b&gt;RoleMemberships&lt;/b&gt; by default) contains which users are members of which roles. Use the following SQL code to create the two tables:&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;CREATE&lt;/span&gt; &lt;span style="color:Blue;"&gt;TABLE&lt;/span&gt; dbo.Roles (
    RoleName                &lt;span style="color:Blue;"&gt;nvarchar&lt;/span&gt;(100)  &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    &lt;span style="color:Blue;"&gt;CONSTRAINT&lt;/span&gt; PK_Roles &lt;span style="color:Blue;"&gt;PRIMARY&lt;/span&gt; &lt;span style="color:Blue;"&gt;KEY&lt;/span&gt; &lt;span style="color:Blue;"&gt;CLUSTERED&lt;/span&gt; (RoleName)
)
&lt;span style="color:Blue;"&gt;CREATE&lt;/span&gt; &lt;span style="color:Blue;"&gt;TABLE&lt;/span&gt; dbo.RoleMemberships (
    UserName                &lt;span style="color:Blue;"&gt;nvarchar&lt;/span&gt;(100)  &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    RoleName                &lt;span style="color:Blue;"&gt;nvarchar&lt;/span&gt;(100)  &lt;span style="color:Blue;"&gt;NOT&lt;/span&gt; &lt;span style="color:Blue;"&gt;NULL&lt;/span&gt;,
    &lt;span style="color:Blue;"&gt;CONSTRAINT&lt;/span&gt; PK_RoleMemberships &lt;span style="color:Blue;"&gt;PRIMARY&lt;/span&gt; &lt;span style="color:Blue;"&gt;KEY&lt;/span&gt; &lt;span style="color:Blue;"&gt;CLUSTERED&lt;/span&gt; (UserName, RoleName),
    &lt;span style="color:Blue;"&gt;CONSTRAINT&lt;/span&gt; FK_RoleMemberships_Roles 
        &lt;span style="color:Blue;"&gt;FOREIGN&lt;/span&gt; &lt;span style="color:Blue;"&gt;KEY&lt;/span&gt; (RoleName) &lt;span style="color:Blue;"&gt;REFERENCES&lt;/span&gt; dbo.Roles (RoleName) 
        &lt;span style="color:Blue;"&gt;ON&lt;/span&gt; &lt;span style="color:Blue;"&gt;UPDATE&lt;/span&gt; &lt;span style="color:Blue;"&gt;CASCADE&lt;/span&gt; &lt;span style="color:Blue;"&gt;ON&lt;/span&gt; &lt;span style="color:Blue;"&gt;DELETE&lt;/span&gt; &lt;span style="color:Blue;"&gt;CASCADE&lt;/span&gt;,
)
&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;Using membership and role providers together&lt;/h3&gt;
The membership and role providers are totally independent and can be combined with any other providers. However, if you use both the &lt;b&gt;TableMembershipProvider&lt;/b&gt; and &lt;b&gt;TableRoleProvider&lt;/b&gt;, you might want to add foreign key constraint between their tables, so when you delete the user, its role mappings are deleted as well:&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;ALTER&lt;/span&gt; &lt;span style="color:Blue;"&gt;TABLE&lt;/span&gt; dbo.RoleMemberships 
    &lt;span style="color:Blue;"&gt;ADD&lt;/span&gt; &lt;span style="color:Blue;"&gt;CONSTRAINT&lt;/span&gt; FK_RoleMemberships_Users 
    &lt;span style="color:Blue;"&gt;FOREIGN&lt;/span&gt; &lt;span style="color:Blue;"&gt;KEY&lt;/span&gt; (UserName) &lt;span style="color:Blue;"&gt;REFERENCES&lt;/span&gt; dbo.Users (UserName) 
    &lt;span style="color:Blue;"&gt;ON&lt;/span&gt; &lt;span style="color:Blue;"&gt;UPDATE&lt;/span&gt; &lt;span style="color:Blue;"&gt;CASCADE&lt;/span&gt; &lt;span style="color:Blue;"&gt;ON&lt;/span&gt; &lt;span style="color:Blue;"&gt;DELETE&lt;/span&gt; &lt;span style="color:Blue;"&gt;CASCADE&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;Configuring the providers in web.config&lt;/h2&gt;
To use the SQL Table providers, include the following settings in your &lt;b&gt;web.config&lt;/b&gt; file:&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;configuration&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;appSettings&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;connectionStrings&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;add&lt;/span&gt; &lt;span style="color:Red;"&gt;name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;TableAuthDB&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;providerName&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;System.Data.SqlClient&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;connectionString&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;...&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;connectionStrings&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;system.web&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;membership&lt;/span&gt; &lt;span style="color:Red;"&gt;defaultProvider&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;MyMembershipProvider&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;providers&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;clear&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;add&lt;/span&gt; &lt;span style="color:Red;"&gt;name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;MyMembershipProvider&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;
                     &lt;span style="color:Red;"&gt;type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Altairis.Web.Security.TableMembershipProvider, Altairis.Web.Security&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;
                     &lt;span style="color:Red;"&gt;connectionStringName&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;TableAuthDB&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;providers&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;membership&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;roleManager&lt;/span&gt; &lt;span style="color:Red;"&gt;enabled&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;true&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;defaultProvider&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;MyRoleProvider&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;providers&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;clear&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;add&lt;/span&gt; &lt;span style="color:Red;"&gt;name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;MyRoleProvider&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; 
                     &lt;span style="color:Red;"&gt;type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Altairis.Web.Security.TableRoleProvider, Altairis.Web.Security&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;
                     &lt;span style="color:Red;"&gt;connectionStringName&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;TableAuthDB&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;providers&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;roleManager&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;system.web&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;configuration&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;Configuring membership provider&lt;/h3&gt;
The following configuration attributes are supported:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Common for all membership providers:
&lt;ul&gt;&lt;li&gt;&lt;b&gt;applicationName&lt;/b&gt; (can be set, but is ignored)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;minRequiredNonAlphanumericCharacters&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;minRequiredPasswordLength&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;passwordStrengthRegularExpression&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;requiresUniqueEmail&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Specific for this provider:
&lt;ul&gt;&lt;li&gt;&lt;b&gt;connectionStringName&lt;/b&gt; - name of connection string defined in the &lt;i&gt;connectionStrings&lt;/i&gt; section to use for database connectivity.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;tableName&lt;/b&gt; - name of database table to store user information. Default is &lt;i&gt;Users&lt;/i&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h3&gt;Configuring role provider&lt;/h3&gt;
The following configuration attributes are supported:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Common for all role providers:
&lt;ul&gt;&lt;li&gt;&lt;b&gt;applicationName&lt;/b&gt; (can be set, but is ignored)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Specific for this provider:
&lt;ul&gt;&lt;li&gt;&lt;b&gt;connectionStringName&lt;/b&gt; - name of connection string defined in the &lt;i&gt;connectionStrings&lt;/i&gt; section to use for database connectivity.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;rolesTableName&lt;/b&gt; - name of database table to store roles. Default is &lt;i&gt;Roles&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;roleMembershipsTableName&lt;/b&gt; - name of database table to store information about role members. Default is &lt;i&gt;RoleMemberships&lt;/i&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>altair</author><pubDate>Sat, 25 Dec 2010 20:33:25 GMT</pubDate><guid isPermaLink="false">Updated Wiki: SQL Table Providers 20101225083325P</guid></item><item><title>Updated Wiki: Home</title><link>http://altairiswebsecurity.codeplex.com/wikipage?version=10</link><description>&lt;div class="wikidoc"&gt;The &lt;b&gt;Altairis Web Security Toolkit&lt;/b&gt; consists of several parts:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=SQL%20Table%20Providers&amp;referringTitle=Home"&gt;SQL Table Providers&lt;/a&gt;&lt;/b&gt; are re-implementation of standard ASP.NET membership, profile and role providers, but using simple database structure.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=PlainTextMembershipProvider&amp;referringTitle=Home"&gt;PlainTextMembershipProvider&lt;/a&gt;&lt;/b&gt; is basic low-security membership provider using plain text file as its user database.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=BasicAuthenticationModule&amp;referringTitle=Home"&gt;BasicAuthenticationModule&lt;/a&gt;&lt;/b&gt; is authentication module for ASP.NET/IIS7, implementing standard HTTP Basic Authentication, woring with any membership provider (including, but not limited to the two contained in this library)&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;The original release (older than 2.0) contained also &lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=Simple%20SQL%20Providers&amp;referringTitle=Home"&gt;Simple SQL Providers&lt;/a&gt;, which are no longer developed and were replaced by SQL Table Providers mentioned above.&lt;br /&gt;
&lt;h2&gt;Further information&lt;/h2&gt;
&lt;a href="http://altairiswebsecurity.codeplex.com/wikipage?title=Author%20and%20contact&amp;referringTitle=Home"&gt;Author and contact&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>altair</author><pubDate>Sat, 25 Dec 2010 19:32:48 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20101225073248P</guid></item></channel></rss>