将用户和密码移动到新的成员资格数据库

时间:2012-08-23 07:15:37

标签: asp.net-membership asp.net-4.5

我正在尝试将我在.Net 4中创建的会员数据库移动到新创建的.Net 4.5会员数据库。 .Net 4.5数据库具有与旧.Net 4数据库不同的模式。 所以我创建了一个新的4.5成员资格数据库,并尝试重新创建用户。

我从旧数据库中选择我的用户,然后使用Membership.CreateUser()在新成员资格数据库中重新创建这些用户。 由于我还需要他们的密码,我使用SQL UPDATE语句将Membership表中的Password和PasswordSalt字段设置为与旧数据库中的相同值。

任何新用户都可以在没有任何问题的情况下登录,但是如上所述,用户无法登录(“您的登录尝试未成功。请再试一次。”)

我可以看到“FailedPasswordAttemptCount”随着尝试登录而增加。所以它正在找到用户......问题必须是密码或密码的解密。

我做错了什么,试图复制密码? 这两个数据库都在同一台机器上......密码和称号密封条应该足以解密它吗?

1 个答案:

答案 0 :(得分:1)

首先,您的情况下的密码不会被解密,用户提交的密码会被散列,并且会与存储在数据库中的散列进行比较。散列通常可以在机器密钥上运行,但可以在Web.Config和不同版本的IIS中进行更改。

您可以尝试制作原始数据库的副本,然后针对它运行.net 4.5 ASPNET_REGSQL以查看它是否会正确更新它,我怀疑它会,但它值得一试。

我要做的第一件事就是查看Web.Config部分的Providers文件,并验证它与旧项目版本的相同。这决定了密码格式,如果幸运的话,这将是问题,但我怀疑它是。

您也可以(取决于数据库中有多少用户)通过某个程序或网站解密其密码。 This已过时但可能有所帮助。如果可以检索其纯文本密码,您可以像这样重新创建用户。

我找不到任何说哈希过程从版本4.0更改为4.5的内容,但如果确实如此,则可能需要定义自定义哈希算法。基本上,您需要以.net 4.0的方式重新创建哈希。

如果第一次验证失败,您还可以尝试对密码进行第二次手动验证。类似于this

  

PasswordFormat值在。的providers部分中指定   ASP.NET应用程序的Web.config文件。

     

默认情况下,加密或散列密码已加密或散列   基于您的machineKey元素中提供的信息   组态。请注意,如果为其指定了3DES值   验证属性,或者如果未指定值,则使用散列密码   将使用SHA1算法进行哈希处理。

     

可以使用hashAlgorithmType定义自定义哈希算法   成员资格配置元素的属性。如果你选择   加密,默认密码加密使用AES。你可以改变   加密算法通过设置解密属性   machineKey配置元素。如果您正在加密密码,那么   必须为其中的decryptionKey属性提供显式值   machineKey元素。的默认值为AutoGenerate   使用加密时不支持decryptionKey属性   ASP.NET成员资格的密码。