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

ASP.NET成员资格提供程序在不同的SQL实例上失败,asp.net,sql,membership-provider,Asp.net,Sql,Membership Provider,我在SQL1(通过windows server托管)上使用aspnet_regsql.exe使用ASP.NET成员模式,我在SQL2(本地实例)上还原了该sql数据库的备份 但是,当我的连接字符串指向SQL2时,身份验证失败@ Membership.ValidateUser 会员资格,尤瑟 它返回一个false,但当我将连接字符串更改回SQL1时,它返回true,这发生在同一个代码基上。我不确定是什么原因造成的,我尝试了以下方法 检查了SQL1和SQL2密码和密码,它们完全匹配 尝试使用SQL

我在SQL1(通过windows server托管)上使用aspnet_regsql.exe使用ASP.NET成员模式,我在SQL2(本地实例)上还原了该sql数据库的备份

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

Membership.ValidateUser 会员资格,尤瑟 它返回一个false,但当我将连接字符串更改回SQL1时,它返回true,这发生在同一个代码基上。我不确定是什么原因造成的,我尝试了以下方法

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

有什么想法吗?

加密的密码是从机器密钥的散列中创建的(它位于web.config中,因此如果这是同一个web服务器,可能会成为一个麻烦?)+实际的pwd+随机生成的密码

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

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

我过去的痛苦经历告诉我,如果你还在挠头——去找一个像样的反编译器(ILSpy),把调试器连接到dll上,然后像你自己的代码那样逐步执行


如果密码以哈希形式存储,则不会使用机器密钥

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

如果它们是混合的,并且没有在web.config中显式设置机器密钥,那么您唯一能做的就是使用以下方法从旧服务器检索机器密钥-


根据经验,您希望在web.config中包含机器密钥。我们了解到,如果您不在web.config中设置机器密钥,Azure会自动创建机器密钥。salt是从具有机器密钥的哈希中创建的(它位于web.config中,因此如果这是同一个web服务器,可能会成为一个麻烦)?没有什么可以阻止您运行sql跟踪以获取命令,并尝试在QA中运行这些命令。另外,“failing”表示它返回false?是的,我的意思是“failing”,正如ValidateUsers返回false一样,web.config没有设置机器密钥,但我将检查sql跟踪以查看有什么不同,假设它只使用存储的salt,而没有其他与机器相关的内容,所以你说的是存储位置不能更改?不过我对机器密钥有点困惑,这发生在同一台机器上(在本地框上指向SQL1时起作用),除非它是一个与SQL相关的机器密钥?是的,这是一个暗箭伤人-forms auth有点像黑暗艺术/黑魔法。机器密钥仅由web服务器通过asp.net成员api使用。因此,除非您知道原始机器密钥(没有人说它是machine.config中的密钥),否则它是另一个。哇,我想我知道问题出在哪里了,当我进行跟踪时,它正在执行GetPasswordWithFormat,当我手动运行它时,由于clr未启用而出错,这可能是在我们的服务器上启用的。。啊!接受答案,因为你让我得到了那个解决方案