2011-12-12 62 views
1

因此,我正在將應用程序從集成安全性轉換爲使用內置成員資格提供程序進行表單身份驗證,並具有最奇怪的行爲。最初,我使用默認的sqlexpress配置,在App_Data文件夾中創建一個aspnetdb.mdf文件。ASP.NET會員之謎

但是,我想將它移到我的SQL Server,並通過在SQL Server數據庫中創建過程和表來實現,並將提供者指向該數據庫。然而,當我運行網站管理工具時,它不會查看SQL Server。

它不斷創建一個aspnetdb.mdf文件並使用該文件,即使我的應用程序似乎正確地擊中了SQL數據庫。最後,我關閉了SQLEXPRESS服務,現在是真正奇怪的位發生的地方。

登錄工作正常 - Membership.Provider.ValidateUser(LoginUser.UserName, LoginUser.Password)返回true。但是,如果調用IsInRole,則超時將無法連接到數據庫。顯然,它試圖連接到SQLEXPRESS數據庫。我已重新啓動IIS,重新啓動數據庫服務無濟於事。

這是不是告訴會員服務,達到什麼樣的數據庫的正確的地方:

<connectionStrings> 
    <add name="MyConnection" connectionString="user id=myuser;password=mypassword;data source=SERVER\INSTANCE;initial catalog=mycatalog;"/> 
</connectionStrings> 

<system.web> 
    <authentication mode="Forms"> 
     <forms name="formsauth" protection="None" path="/" loginUrl="~/Account/Login.aspx" cookieless="UseCookies"/> 
    </authentication> 
    <roleManager enabled="true" /> 
    <membership> 
     <providers> 
      <remove name="AspNetSqlMembershipProvider"/> 
      <add name="AspNetSqlMembershipProvider" 
    type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
    connectionStringName="MyConnection" 
    enablePasswordRetrieval="false" 
    enablePasswordReset="true" 
    requiresQuestionAndAnswer="false" 
    applicationName="/MyApp" 
    requiresUniqueEmail="false" 
    minRequiredPasswordLength="6" 
    minRequiredNonalphanumericCharacters="0" 
    passwordFormat="Hashed" 
    maxInvalidPasswordAttempts="5" 
    passwordAttemptWindow="10" 
    passwordStrengthRegularExpression="" 
    /> 
     </providers> 

回答

5

首先,爲什麼正在創建aspnetdb.mdf的原因是因爲你使用ASP.NET配置工具。它只適用於SQL Express實例。它不能用於完全成熟的SQL Server。爲此,您基本上需要在自己的應用程序中重新創建管理面板。

如果您希望在本地SQL Server下使用角色,則還需要將web.config配置爲指向角色提供者的SQL Server。默認情況下,它指向Membership provider也指向的aspnetdb.mdf文件。

例如:

<system.web> 
    <roleManager defaultProvider="SqlRoleProvider" enabled="true"> 
     <providers> 
     <clear /> 
     <add name="SqlRoleProvider" 
      type="System.Web.Security.SqlRoleProvider" 
      connectionStringName="MyConnection"/> <!--- Point this to your sql server --> 
     </providers> 
    </roleManager> 
</system.web> 

對你來說會是這個樣子:

<configuration> 
    <connectionStrings> 
    <add name="MyConnection" connectionString="user id=myuser;password=mypassword;data source=SERVER\INSTANCE;initial catalog=mycatalog;"/> 
    </connectionStrings> 

    <system.web> 
    <authentication mode="Forms"> 
     <forms name="formsauth" protection="None" path="/" loginUrl="~/Account/Login.aspx" cookieless="UseCookies"/> 
    </authentication> 

    <membership> 
     <providers> 
     <remove name="AspNetSqlMembershipProvider"/> 
     <add name="AspNetSqlMembershipProvider" 
      type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
      connectionStringName="MyConnection" 
      enablePasswordRetrieval="false" 
      enablePasswordReset="true" 
      requiresQuestionAndAnswer="false" 
      applicationName="/MyApp" 
      requiresUniqueEmail="false" 
      minRequiredPasswordLength="6" 
      minRequiredNonalphanumericCharacters="0" 
      passwordFormat="Hashed" 
      maxInvalidPasswordAttempts="5" 
      passwordAttemptWindow="10" 
      passwordStrengthRegularExpression=""/> 
     </providers> 
    </membership> 

    <roleManager defaultProvider="SqlRoleProvider" enabled="true"> 
     <providers> 
     <clear /> 
     <add name="SqlRoleProvider" 
      type="System.Web.Security.SqlRoleProvider" 
      connectionStringName="MyConnection"/> <!--- Point this to your sql server --> 
     </providers> 
    </roleManager> 
    </system.web> 
</configuration> 

在這裏看到更多的細節:Membership and Role Provider

+0

謝謝 - 我想我一直認爲的配置工具足夠聰明,可以獲取配置設置。傻我。無論如何,這是訣竅! – sydneyos