ASP.NET成员资格提供程序在不同的SQL实例上失败

时间:2014-02-10 18:32:57

标签: asp.net sql membership-provider

我在SQL1上使用aspnet_regsql.exe使用ASP.NET Membership Schema(通过windows服务器托管),我在SQL2(本地实例)上恢复了该sql数据库的备份。

但是,当我的连接字符串指向SQL2时,身份验证失败@

Membership.ValidateUser

返回false,但是当我将连接字符串更改回SQL1时,它返回true,这发生在相同的代码库上。我不确定是什么导致这种情况,我尝试了以下

  • 检查了SQL1和SQL2密码和盐,它们完全匹配
  • 尝试使用SQL Compare查看是否存在不同的架构 完全匹配
  • 检查SQL登录权限,它们都匹配

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

加密密码是从机器密钥的哈希值创建的(在web.config中,如果这是同一个Web服务器,可能是红鲱鱼?)+实际的密码+随机生成的密码盐。

尝试运行sql跟踪来捕获已发出的命令并尝试在QA中运行它们。这将显示哈希不匹配或简单的身份验证失败。

也许您应该强制机器密钥,查找machine.config并将其从那里复制到本地web.config。

我过去的痛苦历史说如果你还在摸不着头脑 - 去找一个像样的反编译器(ILSpy)并将你的调试器附加到dll上,然后像你自己的代码那样单步执行。

Machine key in Forms-Auth

答案 1 :(得分:1)

如果密码存储为哈希,则不使用机器密钥。

但是,密码存储为加密,它使用机器密钥。

如果它们是混合的并且未在web.config中明确设置机器密钥,则只能使用此方法从旧服务器检索机器密钥 -

How to read Auto Generated machine key?

经验法则是要在web.config中包含机器密钥。 如果您未在web.config中设置机密钥,我们将了解Azure自动创建机器密钥的难度。