Для System.Web.Security.SqlMembershipProvider требуется схема базы данных, совместимая с версией схемы «1». - PullRequest
56 голосов
/ 20 июля 2010

У меня есть БД SQL Server 2008 со многими таблицами, заполненными данными, и я использовал SQL Server Management Studio для создания дампа SQL с помощью мастера сценариев: Задачи -> Создать сценарии -> Сценарий Все объекты в выбранной базе данных, а также выбрав опцию Script Data. Я удостоверился, что изменил значение «Script for Server Version» на «SQL Server 2008». Затем я создал новую БД и запустил дамп SQL на новой БД, чтобы сгенерировать идентичную копию старой БД. Затем я назначил разрешения своему пользователю по умолчанию для новой БД. Затем я изменил строку подключения в своем приложении ASP.NET, чтобы использовать новую БД. Но когда я запускаю его, он выдает следующее исключение -

            Server Error in '/myapp' Application.
            The 'System.Web.Security.SqlMembershipProvider' requires a database schema compatible with schema version '1'.  However, the current database schema is not compatible with this version.  You may need to either install a compatible schema with aspnet_regsql.exe (available in the framework installation directory), or upgrade the provider to a newer version.
            Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

            Exception Details: System.Configuration.Provider.ProviderException: The 'System.Web.Security.SqlMembershipProvider' requires a database schema compatible with schema version '1'.  However, the current database schema is not compatible with this version.  You may need to either install a compatible schema with aspnet_regsql.exe (available in the framework installation directory), or upgrade the provider to a newer version.

            Source Error:

            An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

            Stack Trace:

            [ProviderException: The 'System.Web.Security.SqlMembershipProvider' requires a database schema compatible with schema version '1'.  However, the current database schema is not compatible with this version.  You may need to either install a compatible schema with aspnet_regsql.exe (available in the framework installation directory), or upgrade the provider to a newer version.]
               System.Web.Util.SecUtility.CheckSchemaVersion(ProviderBase provider, SqlConnection connection, String[] features, String version, Int32& schemaVersionCheck) +1977772
               System.Web.Security.SqlMembershipProvider.CheckSchemaVersion(SqlConnection connection) +89
               System.Web.Security.SqlMembershipProvider.GetPasswordWithFormat(String username, Boolean updateLastLoginActivityDate, Int32& status, String& password, Int32& passwordFormat, String& passwordSalt, Int32& failedPasswordAttemptCount, Int32& failedPasswordAnswerAttemptCount, Boolean& isApproved, DateTime& lastLoginDate, DateTime& lastActivityDate) +815
               System.Web.Security.SqlMembershipProvider.CheckPassword(String username, String password, Boolean updateLastLoginActivityDate, Boolean failIfNotApproved, String& salt, Int32& passwordFormat) +105
               System.Web.Security.SqlMembershipProvider.CheckPassword(String username, String password, Boolean updateLastLoginActivityDate, Boolean failIfNotApproved) +42
               System.Web.Security.SqlMembershipProvider.ValidateUser(String username, String password) +78
               System.Web.UI.WebControls.Login.AuthenticateUsingMembershipProvider(AuthenticateEventArgs e) +60
               System.Web.UI.WebControls.Login.OnAuthenticate(AuthenticateEventArgs e) +119
               System.Web.UI.WebControls.Login.AttemptLogin() +115
               System.Web.UI.WebControls.Login.OnBubbleEvent(Object source, EventArgs e) +101
               System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
               System.Web.UI.WebControls.Button.OnCommand(CommandEventArgs e) +118
               System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +166
               System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
               System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
               System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36
               System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1565

Ответы [ 12 ]

103 голосов
/ 18 апреля 2011

Я нашел очень простой способ, просто вставьте эти данные в таблицу aspnet_SchemaVersions

common              1   True
health monitoring   1   True
membership          1   True
personalization     1   True
profile             1   True
role manager        1   True

Мне пришлось использовать несколько пробелов для выравнивания данных, игнорировать пробелы

47 голосов
/ 21 июля 2010

Если вы действительно ничего не забыли (просмотры, SP и т. Д. И т. Д.), То поиск в Google показывает, что «глупые» решения, такие как закрытие проекта и повторное открытие, перестроение или:

То, что на самом деле помогло, было в использовании утилиты конфигурации ASP.NET (Visual Studio - в меню «Веб-сайт»), перевод приложения в автономный режим, а затем обратно в оперативный режим. Это на самом деле просто вносит изменения в web.config (не совсем точно, что это было за изменение). Поэтому после перевода его в автономный режим мне пришлось загрузить файл web.config в размещенное решение. Затем вернул приложение в оперативный режим, переписал web.config и т. Д.

Может быть ответ.

36 голосов
/ 11 октября 2011

У меня была похожая проблема, и я смог ее решить, добавив значение по умолчанию в таблицу aspnet_SchemaVersions.Эти значения по умолчанию не были добавлены в базу данных, созданную с помощью Задачи -> Создать сценарии.

Здесь полезно post

INSERT INTO dbo.aspnet_SchemaVersions 
VALUES
('common', 1, 1),
('membership', 1, 1),
('role manager', 1, 1);
GO
13 голосов
/ 16 ноября 2010

Перезагрузка пула приложений сработала у меня

6 голосов
/ 10 сентября 2012

Я вовсе не гуру или программист SQL или ASP.net, получил работу случайно, но у меня возникла та же проблема, и ошибка была глупой:

В моем Web.Conf строки подключения обычно выглядят примерно так:

<add name="AgriConnectionString" connectionString="Data Source=.\SQLEXPRESS; Initial Catalog=AgriBranch; pooling=true; Connection Timeout=120; Integrated Security=false;Persist Security Info=True; User ID=UserID; Password=PASS***WORD" providerName="System.Data.SqlClient" />

И все же вчера у меня случайно был мой источник, похожий на этот "Data Source=./SQLEXPRESS".

И я получил ту же ошибку, что и обсуждаемая.

Эта ошибка также объясняет, почему при переводе сайта в автономный режим и повторном подключении к нему с помощью утилиты Visual Studio или при перекомпиляции он исправляет ошибку.

5 голосов
/ 10 декабря 2013

Попробуйте обновить файл веб-конфигурации с правильной версией System.Web.Security.SqlRoleProvider

Вы можете найти следующую конфигурацию в c: /windows/microsoft.net/framework/v4.0.30319 или любой другой версии, там вы можете найти файл конфигурации В него проверьте файлы конфигурации машины получить версию и открытый ключ.

Для .net frameowork 4.0

     <roleManager enabled="true" defaultProvider="SqlProvider">
     <providers>
        <clear/>
        <add name="SqlProvider" connectionStringName="rolesDB" applicationName="/" type="System.Web.Security.SqlRoleProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
     </providers>
  </roleManager>

для .net framework 2.0

    <roleManager enabled="true" defaultProvider="SqlProvider">
     <providers>
        <clear/>
        <add name="SqlProvider" connectionStringName="rolesDB" applicationName="/" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
     </providers>
  </roleManager>
3 голосов
/ 02 октября 2012

Вам может потребоваться запустить aspnet_regsql.exe, чтобы получить значения вашей схемы.Вы можете жестко закодировать значения, а также, если у вас есть все сгенерированные объекты (таблицы, представления, sproc и т. Д.)

Шаги, которые я предпринял, чтобы решить эту проблему, работали:

re-run aspnet_regsql.exe обеспечил значения по умолчанию, где перезапустил IIS.

Тогда это сработало ..

Но если вы просто скопируете схему базы данных без значений, вам нужно запустить'aspnet_regsql.exe' для заполнения значений по умолчанию.

файл можно найти здесь (re: msdn): [диск:] \% windir% \ Microsoft.NET \ Framework \ version (он находится в2.0 dir)

и вот некоторая информация:
http://msdn.microsoft.com/en-us/library/ms229862%28v=vs.80%29.aspx

1 голос
/ 10 марта 2015

Я перепробовал многие из приведенных выше вариантов, но ни один из них, казалось, не решил проблему в то время (хотя они , возможно, помогли, и я не осознал этого).

Последним шагом, который я предпринял [это сработало], было предоставление пользователю SQL в строке подключения доступа к ролям aspnet_ *, установленным aspnet_regsql.exe. Мой пользователь SQL был настроен как db_owner в базе данных, но не был системным администратором - не уверен, имеет ли это значение.

Как только я это сделал, и после Я уже попробовал некоторые из вышеперечисленных вариантов, все отлично заработало.

1 голос
/ 06 апреля 2013

В моем случае ни одно из вышеперечисленных решений не сработало.

Я удалил applicationName = "/" из провайдера меморандумов в webconfig, который был создан Visual Studio, а затем загрузил его на сервер.

Или вы можете вручную создать строку приложения в таблице aspnet_Applications.

Приятного кодирования!

0 голосов
/ 02 марта 2017

Старый пост, но у меня было альтернативное решение.

Мои строки подключения в web.config включены Persist Security Info=True; в них.Удаление этого решило ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...