![MySql 成员资格提供程序-缺少或不正确的架构](https://linux22.com/image/642851/MySql%20%E6%88%90%E5%91%98%E8%B5%84%E6%A0%BC%E6%8F%90%E4%BE%9B%E7%A8%8B%E5%BA%8F-%E7%BC%BA%E5%B0%91%E6%88%96%E4%B8%8D%E6%AD%A3%E7%A1%AE%E7%9A%84%E6%9E%B6%E6%9E%84.png)
我们有一个在 IIS 7.5 上运行的 ASP.NET 站点,使用 .net 连接器的 MySQL 数据库,成员资格/角色提供程序在 web.config 中正确设置,并且它们可以正常工作 - 但只是暂时的。
从历史上看(.net 连接器 6.7.4.0 及更早版本),在恢复包括会员表在内的站点备份后,我们总是遇到问题,我们会在页面上收到一条错误,提示会员提供者的“架构缺失或不正确”,这是无稽之谈,因为我们可以在数据库中清楚地看到表格。
为了解决这个问题,我们只需从数据库中删除成员资格表,在 web.config 中设置 autogenerateschema=true,让角色提供程序再次自动生成表,这样就可以了。然后我们可以从备份中恢复(同一个备份!),并用现有帐户覆盖新的空白表,一切正常。我们认为这只是 .net 连接器的一个怪癖,因为它只在从备份恢复数据库后发生,所以我们并不太担心。
现在我们已升级到 .net 连接器 6.9.4.0,我们遇到了同样的问题,只是情况更糟,因为现在如果重新启动该网站的应用程序池,它会触发相同的“缺少或不正确的架构”消息,我们已应用上述修复。执行诸如更改 web.config 之类的操作会触发应用程序池循环,这意味着我们无法在不关闭网站的情况下更改 web.config!
这是来自 web.config 的角色提供程序,省略了一些细节,除了我们手动更新版本号之外,它从未改变过。
<roleManager defaultProvider="MySQLRoleProvider" enabled="true">
<providers>
<clear />
<add name="MySQLRoleProvider" type="MySql.Web.Security.MySQLRoleProvider, MySql.Web, Version=6.9.4.0, Culture=neutral, PublicKeyToken=xxxxxx" applicationName="xxxxx" connectionStringName="xxxxxx" autogenerateschema="True" />
</providers>
</roleManager>
值得注意的是,触发该错误并应用我们的修复后,我们从完全相同的备份中恢复成员资格表,这意味着修复之前/之后的表是相同的,因此它不可能是数据库的问题,它是 IIS 的一些内部状态。
答案1
我已经解决了这个问题,您需要更新存储在数据库本身中的架构版本,您可以通过针对数据库运行此 SQL 手动执行此操作。
UPDATE my_aspnet_schemaversion SET version = 10
将 10 替换为适合您下载的连接器的任何版本。