Mysql

MySql 成員資格提供程序 - 缺少或不正確的架構

  • April 15, 2022

我們有一個在 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 的狀態。

我已經弄清楚了,您需要更新儲存在數據庫本身中的模式版本,您可以通過對數據庫執行此 SQL 來手動執行此操作。

UPDATE my_aspnet_schemaversion SET version = 10

將 10 替換為適合您下載的連接器的任何版本。

引用自:https://serverfault.com/questions/632717