{"id":2374,"date":"2012-08-16T10:40:00","date_gmt":"2012-08-16T10:40:00","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/webdev\/2012\/08\/16\/migration-for-user-accounts-from-the-sqlmembershipprovider-to-the-universal-providers\/"},"modified":"2012-08-16T10:40:00","modified_gmt":"2012-08-16T10:40:00","slug":"migration-for-user-accounts-from-the-sqlmembershipprovider-to-the-universal-providers","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/dotnet\/migration-for-user-accounts-from-the-sqlmembershipprovider-to-the-universal-providers\/","title":{"rendered":"Migration for user accounts from the SqlMembershipProvider to the Universal Providers"},"content":{"rendered":"<p><font color=\"#000000\">As you know ASP.Net SqlMembershipProvider \/ SqlRoleProvider only support Microsoft SQL Server and Microsoft SQL Server<\/font> <font color=\"#000000\">Express. There is no support for <\/font><a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/ee336241.aspx\"><font color=\"#0000ff\">Microsoft SQL Azure<\/font><\/a> and <a href=\"http:\/\/www.microsoft.com\/downloads\/en\/details.aspx?FamilyID=033cfb76-5382-44fb-bc7e-b3c8174832e2\"><font color=\"#0000ff\">Microsoft SQL Server Compact<\/font><\/a>. <font color=\"#000000\">The ASP.NET Universal Providers have been created in order to add support for SQL Azure to be ready for cloud environments like Azure. <\/font><\/p>\n<p> <font color=\"#000000\"><\/font>  <\/p>\n<p><font color=\"#000000\">Here we will talk about how<em> to migrate your existing<\/em> project with the SqlMembershipProvider for your<em> <\/em>user accounts and passwords to the Universal Providers.<\/font><\/p>\n<p> <font color=\"#000000\"><\/font>  <\/p>\n<p><font color=\"#000000\">First, install the Universal Providers Nuget package. This will update the <em>existing<\/em> project to use Universal Providers. You can also migrate the <em>existing <\/em>user accounts and passwords from the SqlMembershipProvider to the Universal Providers using the instructions below.<\/font><\/p>\n<p> <font color=\"#000000\"><\/font>  <\/p>\n<p><font color=\"#000000\">Migrate all the accounts from the old tables to the new tables:<\/font><\/p>\n<p> <font color=\"#000000\"><\/font>  <\/p>\n<ul><font color=\"#000000\"><\/font>    <\/p>\n<li><font color=\"#000000\">For Microsoft ASP.NET Universal Providers 1.1 \/1.2, below is sample SQL scripts for the membership and role providers (this doesn\u2019t cover the profile provider):<\/font><\/li>\n<\/ul>\n<blockquote>\n<pre><font color=\"#0000ff\">INSERT INTO<\/font> dbo.Applications (ApplicationName, ApplicationId, Description)<\/pre>\n<pre><font color=\"#0000ff\">SELECT<\/font> ApplicationName, ApplicationId, Description <font color=\"#0000ff\">FROM<\/font> dbo.aspnet_Applications<\/pre>\n<pre><font color=\"#0000ff\">GO<\/font><\/pre>\n<pre>&#160;<\/pre>\n<pre><font color=\"#0000ff\">INSERT INTO<\/font> dbo.Roles (ApplicationId, RoleId, RoleName, Description)<\/pre>\n<pre><font color=\"#0000ff\">SELECT<\/font> ApplicationId, RoleId, RoleName, Description <font color=\"#0000ff\">FROM<\/font> dbo.aspnet_Roles<\/pre>\n<pre><font color=\"#0000ff\">GO<\/font><\/pre>\n<pre>&#160;<\/pre>\n<pre><font color=\"#0000ff\">INSERT INTO<\/font> dbo.Users (ApplicationId, UserId, UserName, IsAnonymous, LastActivityDate)<\/pre>\n<pre><font color=\"#0000ff\">SELECT<\/font> ApplicationId, UserId, UserName, IsAnonymous, LastActivityDate <font color=\"#0000ff\">FROM<\/font> dbo.aspnet_Users<\/pre>\n<pre><font color=\"#0000ff\">GO<\/font><\/pre>\n<\/blockquote>\n<pre>&#160;<\/pre>\n<blockquote>\n<pre><font color=\"#0000ff\">INSERT INTO<\/font> dbo.Memberships (ApplicationId, UserId, Password, <br \/>\nPasswordFormat, PasswordSalt, Email, PasswordQuestion, PasswordAnswer, <br \/>\nIsApproved, IsLockedOut, CreateDate, LastLoginDate, LastPasswordChangedDate, <br \/>\nLastLockoutDate, FailedPasswordAttemptCount, <br \/>\nFailedPasswordAttemptWindowStart, FailedPasswordAnswerAttemptCount, <br \/>\nFailedPasswordAnswerAttemptWindowStart, Comment) <\/pre>\n<pre><font color=\"#0000ff\">SELECT<\/font> ApplicationId, UserId, Password, <br \/>\nPasswordFormat, PasswordSalt, Email, PasswordQuestion, PasswordAnswer, <br \/>\nIsApproved, IsLockedOut, CreateDate, LastLoginDate, LastPasswordChangedDate, <br \/>\nLastLockoutDate, FailedPasswordAttemptCount, <br \/>\nFailedPasswordAttemptWindowStart, FailedPasswordAnswerAttemptCount, <br \/>\nFailedPasswordAnswerAttemptWindowStart, Comment <font color=\"#0000ff\">FROM<\/font> dbo.aspnet_Membership<\/pre>\n<pre><font color=\"#0000ff\">GO<\/font><\/pre>\n<pre>&#160;<\/pre>\n<pre><font color=\"#0000ff\">INSERT INTO<\/font> dbo.UsersInRoles SELECT * <font color=\"#0000ff\">FROM<\/font> dbo.aspnet_UsersInRoles<\/pre>\n<pre><font color=\"#0000ff\">GO<\/font><\/pre>\n<pre><font color=\"#0000ff\"><\/font><\/pre>\n<\/blockquote>\n<p><font color=\"#000000\">After all the accounts are migrated from the old tables to the new tables, you could update the config setting for Universal Providers (if needed) to map to the appropriate settings on the SqlMembershipProvider. In this case, a password reset won\u2019t be needed and existing users will still be able to logon<\/font><\/p>\n<p><font color=\"#000000\">Here is a list of the settings for SqlMembershipProvider that should be mapped to the settings on the Universal Providers DefaultMembershipProvider:<\/font><\/p>\n<p>1. <b>Default setting in membership and SqlMembershipProvider<\/b> (here are 2 examples for same results of settings):<\/p>\n<blockquote>\n<p>In SqlMembershipProvider, by default passwordCompatMode is Framework20.<\/p>\n<\/blockquote>\n<blockquote>\n<p>In DefaultMembershipProvider, by default passwordCompatMode is Framework40.<\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"2\" width=\"400\">\n<tbody>\n<tr>\n<td valign=\"top\" width=\"200\"><b>SqlMembershipProvider<\/b><\/td>\n<td valign=\"top\" width=\"200\"><b>DefaultMembershipProvider<\/b><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"200\">e.g.<\/td>\n<td valign=\"top\" width=\"200\">e.g.<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"200\">\n<p> &lt;membership defaultProvider=&quot;AspNetSqlMembershipProvider&quot;&gt;<\/p>\n<p>&#160;&#160;&#160;&#160;&#160; &lt;providers&gt;<\/p>\n<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;clear \/&gt;<\/p>\n<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;add name=&quot;AspNetSqlMembershipProvider&quot; type=&quot;System.Web.Security.SqlMembershipProvider&quot; connectionStringName=&quot;ApplicationServices&quot; applicationName=&quot;test&quot; \/&gt;<\/p>\n<p>&#160;&#160;&#160;&#160;&#160; &lt;\/providers&gt;<\/p>\n<p> &lt;\/membership&gt;<\/p>\n<\/td>\n<td valign=\"top\" width=\"200\">\n<p> &lt;membership defaultProvider=&quot;DefaultMembershipProvider&quot;&gt;<\/p>\n<p>&#160;&#160;&#160;&#160;&#160; &lt;providers&gt;<\/p>\n<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;add name=&quot;DefaultMembershipProvider&quot; type=&quot;System.Web.Providers.DefaultMembershipProvider&quot; connectionStringName=&quot;DefaultConnection&quot; applicationName=&quot;test&quot; passwordCompatMode=&quot;<span style='background:yellow'>Framework20<\/span>&quot; \/&gt;<\/p>\n<p>&#160;&#160;&#160;&#160;&#160; &lt;\/providers&gt;<\/p>\n<p> &lt;\/membership&gt;<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"200\">\n<p> &lt;membership defaultProvider=&quot;AspNetSqlMembershipProvider&quot;&gt;<\/p>\n<p>&#160;&#160;&#160;&#160;&#160; &lt;providers&gt;<\/p>\n<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;clear \/&gt;<\/p>\n<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;add name=&quot;AspNetSqlMembershipProvider&quot; type=&quot;System.Web.Security.SqlMembershipProvider&quot; connectionStringName=&quot;ApplicationServices&quot; applicationName=&quot;test&quot; passwordCompatMode=&quot;<span style='background:yellow'>Framework20<\/span>&quot; \/&gt;<\/p>\n<p>&#160;&#160;&#160;&#160;&#160; &lt;\/providers&gt;<\/p>\n<p> &lt;\/membership&gt;<\/p>\n<\/td>\n<td valign=\"top\" width=\"200\">\n<p> &lt;membership defaultProvider=&quot;DefaultMembershipProvider&quot;&gt;<\/p>\n<p>&#160;&#160;&#160;&#160;&#160; &lt;providers&gt;<\/p>\n<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;add name=&quot;DefaultMembershipProvider&quot; type=&quot;System.Web.Providers.DefaultMembershipProvider&quot; connectionStringName=&quot;DefaultConnection&quot; applicationName=&quot;test&quot; passwordCompatMode=&quot;<span style='background:yellow'>Framework20<\/span>&quot; \/&gt;<\/p>\n<p>&#160;&#160;&#160;&#160;&#160; &lt;\/providers&gt;<\/p>\n<p> &lt;\/membership&gt;<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/blockquote>\n<p>&#160;<\/p>\n<p>2. <b>Specified hashAlgorithmType setting in membership with SqlMembershipProvider<\/b> (here are 2 examples for same results of settings):<\/p>\n<blockquote>\n<p>In SqlMembershipProvider, specified hashAlgorithmType will be used,&#160; no matter what passwordCompatMode.<\/p>\n<\/blockquote>\n<blockquote>\n<p>In DefaultMembershipProvider, because of Medium trust security issue on reading hashAlgorithmType setting in membership, only when passwordCompatMode is Framework40, specified hashAlgorithmType will be used.<\/p>\n<\/blockquote>\n<blockquote>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"2\" width=\"400\">\n<tbody>\n<tr>\n<td valign=\"top\" width=\"200\"><b>SqlMembershipProvider<\/b><\/td>\n<td valign=\"top\" width=\"200\"><b>DefaultMembershipProvider<\/b><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"200\">e.g.<\/td>\n<td valign=\"top\" width=\"200\">e.g.<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"200\">\n<p> &lt;membership defaultProvider=&quot;AspNetSqlMembershipProvider&quot; hashAlgorithmType=&quot;<span style='background:yellow'>SHA256<\/span>&quot;&gt;<\/p>\n<p>&#160;&#160;&#160;&#160;&#160; &lt;providers&gt;<\/p>\n<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;clear \/&gt;<\/p>\n<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;add name=&quot;AspNetSqlMembershipProvider&quot; type=&quot;System.Web.Security.SqlMembershipProvider&quot; connectionStringName=&quot;ApplicationServices&quot; applicationName=&quot;test&quot; passwordCompatMode=&quot;<span style='background:yellow'>Framework20<\/span>&quot; \/&gt;<\/p>\n<p>&#160;&#160;&#160;&#160;&#160; &lt;\/providers&gt;<\/p>\n<p> &lt;\/membership&gt;<\/p>\n<\/td>\n<td valign=\"top\" width=\"200\">\n<p> &lt;membership defaultProvider=&quot;DefaultMembershipProvider&quot; hashAlgorithmType=&quot;<span style='background:yellow'>SHA256<\/span>&quot;&gt;<\/p>\n<p>&#160;&#160;&#160;&#160;&#160; &lt;providers&gt;<\/p>\n<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;add name=&quot;DefaultMembershipProvider&quot; type=&quot;System.Web.Providers.DefaultMembershipProvider&quot; connectionStringName=&quot;DefaultConnection&quot; applicationName=&quot;test&quot; passwordCompatMode=&quot;<span style='background:yellow'>Framework40<\/span>&quot; \/&gt;<\/p>\n<p>&#160;&#160;&#160;&#160;&#160; &lt;\/providers&gt;<\/p>\n<p> &lt;\/membership&gt;<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"200\">\n<p> &lt;membership defaultProvider=&quot;AspNetSqlMembershipProvider&quot; hashAlgorithmType=&quot;<span style='background:yellow'>SHA256<\/span>&quot;&gt;<\/p>\n<p>&#160;&#160;&#160;&#160;&#160; &lt;providers&gt;<\/p>\n<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;clear \/&gt;<\/p>\n<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;add name=&quot;AspNetSqlMembershipProvider&quot; type=&quot;System.Web.Security.SqlMembershipProvider&quot; connectionStringName=&quot;ApplicationServices&quot; applicationName=&quot;test&quot; passwordCompatMode=&quot;<span style='background:yellow'>Framework40<\/span>&quot; \/&gt;<\/p>\n<p>&#160;&#160;&#160;&#160;&#160; &lt;\/providers&gt;<\/p>\n<p> &lt;\/membership&gt;<\/p>\n<\/td>\n<td valign=\"top\" width=\"200\">\n<p> &lt;membership defaultProvider=&quot;DefaultMembershipProvider&quot; hashAlgorithmType=&quot;<span style='background:yellow'>SHA256<\/span>&quot;&gt;<\/p>\n<p>&#160;&#160;&#160;&#160;&#160; &lt;providers&gt;<\/p>\n<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;add name=&quot;DefaultMembershipProvider&quot; type=&quot;System.Web.Providers.DefaultMembershipProvider&quot; connectionStringName=&quot;DefaultConnection&quot; applicationName=&quot;test&quot; passwordCompatMode=&quot;<span style='background:yellow'>Framework40<\/span>&quot; \/&gt;<\/p>\n<p>&#160;&#160;&#160;&#160;&#160; &lt;\/providers&gt;<\/p>\n<p> &lt;\/membership&gt;<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&#160;&#160;&#160; <\/p>\n<\/blockquote>\n<p><b>3. Specified Framework40 passwordCompatMode in SqlMembershipProvider:<\/b><\/p>\n<blockquote>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"2\" width=\"400\">\n<tbody>\n<tr>\n<td valign=\"top\" width=\"200\"><b>SqlMembershipProvider<\/b><\/td>\n<td valign=\"top\" width=\"200\"><b>DefaultMembershipProvider<\/b><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"200\">e.g.<\/td>\n<td valign=\"top\" width=\"200\">e.g.<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"200\">\n<p>&#160;&#160;&#160; &lt;membership defaultProvider=&quot;AspNetSqlMembershipProvider&quot;&gt;<\/p>\n<p>&#160;&#160;&#160;&#160;&#160; &lt;providers&gt;<\/p>\n<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;clear \/&gt;<\/p>\n<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;add name=&quot;AspNetSqlMembershipProvider&quot; type=&quot;System.Web.Security.SqlMembershipProvider&quot; connectionStringName=&quot;ApplicationServices&quot; applicationName=&quot;test&quot; passwordCompatMode=&quot;<span style='background:yellow'>Framework40<\/span>&quot; \/&gt;<\/p>\n<p>&#160;&#160;&#160;&#160;&#160; &lt;\/providers&gt;<\/p>\n<p>&#160;&#160;&#160; &lt;\/membership&gt;<\/p>\n<\/td>\n<td valign=\"top\" width=\"200\">\n<p>&#160;&#160;&#160; &lt;membership defaultProvider=&quot;DefaultMembershipProvider&quot;&gt;<\/p>\n<p>&#160;&#160;&#160;&#160;&#160; &lt;providers&gt;<\/p>\n<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;add name=&quot;DefaultMembershipProvider&quot; type=&quot;System.Web.Providers.DefaultMembershipProvider&quot; connectionStringName=&quot;DefaultConnection&quot; applicationName=&quot;test&quot; passwordCompatMode=&quot;<span style='background:yellow'>Framework40<\/span>&quot; \/&gt;<\/p>\n<p>&#160;&#160;&#160;&#160;&#160; &lt;\/providers&gt;<\/p>\n<p>&#160;&#160;&#160; &lt;\/membership&gt;<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>As you know ASP.Net SqlMembershipProvider \/ SqlRoleProvider only support Microsoft SQL Server and Microsoft SQL Server Express. There is no support for Microsoft SQL Azure and Microsoft SQL Server Compact. The ASP.NET Universal Providers have been created in order to add support for SQL Azure to be ready for cloud environments like Azure. Here we [&hellip;]<\/p>\n","protected":false},"author":459,"featured_media":58792,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[197],"tags":[31,7409],"class_list":["post-2374","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-aspnet","tag-asp-net","tag-universal-providers"],"acf":[],"blog_post_summary":"<p>As you know ASP.Net SqlMembershipProvider \/ SqlRoleProvider only support Microsoft SQL Server and Microsoft SQL Server Express. There is no support for Microsoft SQL Azure and Microsoft SQL Server Compact. The ASP.NET Universal Providers have been created in order to add support for SQL Azure to be ready for cloud environments like Azure. Here we [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts\/2374","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/users\/459"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/comments?post=2374"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts\/2374\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/media\/58792"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/media?parent=2374"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/categories?post=2374"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/tags?post=2374"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}