IT TIP

'System.Web.Security.SqlMembershipProvider'에는 스키마 버전 '1'과 호환되는 데이터베이스 스키마가 필요합니다.

itqueen 2020. 12. 27. 20:35
반응형

'System.Web.Security.SqlMembershipProvider'에는 스키마 버전 '1'과 호환되는 데이터베이스 스키마가 필요합니다.


데이터로 채워진 테이블이 많은 SQL Server 2008 DB가 있고 SQL Server Management Studio를 사용하여 스크립트 마법사를 사용하여 SQL 덤프를 생성했습니다. 작업-> 스크립트 생성-> 선택한 데이터베이스의 모든 개체 스크립팅 및 옵션 선택 스크립트 데이터. "Script for Server Version"의 값을 "SQL Server 2008"로 변경했습니다. 그런 다음 새 DB를 만들고 새 DB에서 SQL 덤프를 실행하여 이전 DB와 동일한 복사본을 생성했습니다. 그런 다음 기본 사용자에게 새 DB에 대한 권한을 할당했습니다. 그런 다음 새 DB를 사용하도록 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

정말로 아무것도 잊은 것이 없다면 (보기, SP 등), 인터넷 검색은 프로젝트를 닫고 다시 열기, 재 구축 또는 다음과 같은 '어리석은'해결책을 나타냅니다.

실제로 트릭을 수행 한 것은 ASP.NET 구성 유틸리티 (Visual Studio-웹 사이트 메뉴 아래)를 통해 응용 프로그램을 오프라인으로 전환 한 다음 다시 온라인으로 전환하는 것입니다. 이것은 실제로 web.config를 변경합니다 (변경 내용이 정확히 무엇인지 확실하지 않음). 따라서 오프라인으로 전환 한 후 호스팅 된 솔루션에 web.config를 업로드해야했습니다. 그런 다음 응용 프로그램을 다시 온라인으로 전환하고 web.config를 다시 복사했습니다.

답이 될 수 있습니다.


매우 간단한 방법을 찾았습니다.이 데이터를 aspnet_SchemaVersions테이블 에 붙여 넣으 세요.

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

데이터를 정렬하기 위해 몇 개의 공백을 사용해야했습니다. 공백은 무시했습니다.


비슷한 문제가 있었고 aspnet_SchemaVersions 테이블에 기본값을 추가하여 해결할 수있었습니다. 이 기본값은 작업-> 스크립트 생성을 사용하여 생성 된 DB에 추가되지 않았습니다.

여기에 유용한 게시물

INSERT INTO dbo.aspnet_SchemaVersions 
VALUES
('common', 1, 1),
('membership', 1, 1),
('role manager', 1, 1);
GO

앱 풀을 다시 시작하는 것이 저에게 효과적이었습니다.


나는 전혀 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의 유틸리티를 사용하여 사이트를 오프라인으로 전환하고 다시 온라인으로 전환 할 때 또는 다시 컴파일 할 때 오류가 수정되는 이유를 설명합니다.


Try updating the web config file with correct version of System.Web.Security.SqlRoleProvider

You can find the below configuration in c:/windows/microsoft.net/framework/v4.0.30319 or any other version , there you can find config file . Into it check for machine config files to get version & public key.

For .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>

for .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>

You may have to run aspnet_regsql.exe in order to get your schema values populated. You can hard-code the values as well as long as you have all of the generated objects (tables, views, sproc's, etc..

The steps i took to resolve this which worked was:

re-ran aspnet_regsql.exe ensured the default values where there restarted IIS.

Then it worked..

But if you just copy the database schema without the values, you need to run 'aspnet_regsql.exe' in order to populate the default values.

the file can be found here (re: msdn): [drive:]\%windir%\Microsoft.NET\Framework\version (it's in 2.0 dir)

and here's some info:
http://msdn.microsoft.com/en-us/library/ms229862%28v=vs.80%29.aspx


In my case neither of above solutions worked.

I removed applicationName="/" from memnership provider in webconfig which was created by visual studio and then uploaded it to server.

Or you can crate the application row in aspnet_Applications table manually.

Have a nice coding!


I tried many of the options above, but none of them seemed to resolve the issue at the time (although they may have helped and I didn't realize it).

The last step I took [that worked] was granting the SQL user in my connection string access to the aspnet_* roles installed by aspnet_regsql.exe. My SQL user was setup as a db_owner on the database, but wasn't a sysadmin on the box - not sure if that matters.

As soon as I did that, and after I'd already tried some of the options above, everything worked great.


I first received this error after forgetting to run the aspreg_sql on my new db. Once done I received this error until I shut down Cassini or the ASP.NET development server. Re-ran and it worked fine.


This basically comes when you copy/past complete website solution. ASP.NET configuration for SQL server should be configured separately. Which means you should run the aspnet_regsql from Visual Studio command prompt and follow instruction accordingly during wizard.


Old post, but I had an alternate solution.

My connection strings in the web.config included Persist Security Info=True; in them. Removing this solved the error.

ReferenceURL : https://stackoverflow.com/questions/3292794/the-system-web-security-sqlmembershipprovider-requires-a-database-schema-compa

반응형