ASP.Net 2.0 中MemberShip和Role的分布儲存問題

來源:互聯網
上載者:User

         因為之前安裝vs.net 2005時沒有安裝MS提供的SQL Server 2005 Express,所以在使用Membership 和Roles疲費了些周折。
         筆者是採用SQL Server 2000 資料庫,如果要使用Membership,需要在"Visual Studio 2005 命令提示"視窗中在指定資料庫中,註冊Membership 相關表,例aspnet_regsql -E -S "localhost" -A m,如果要使用Roles,同樣註冊
aspnet_regsql -E -S "localhost" -A r,有關aspnet_regsql詳細命令可鍵入aspnet_regsql/?得到。
         建立好資料庫後,然後需要配置web.config了,如下

<!-- roleManager -->
    <roleManager defaultProvider="SqlProvider" 
      enabled="true"
      cacheRolesInCookie="true"
      cookieName=".ASPROLES"
      cookieTimeout="30"
      cookiePath="/"
      cookieRequireSSL="false"
      cookieSlidingExpiration="true"
      cookieProtection="All" >
      <providers>
        <clear />
        <add 
           name="SqlProvider" 
           connectionStringName="MySqlConnection" 
           applicationName="RoleManager" 
           type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />     
       </providers>
    </roleManager>
    <!--role Manager end-->
    
    <!-- Membership -->
    <membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="15">
            <providers>
                <clear/>
                <add 
          name="SqlProvider" 
          type="System.Web.Security.SqlMembershipProvider" 
          connectionStringName="MySqlConnection" 
          applicationName="Membership" 
          enablePasswordRetrieval="false" 
          enablePasswordReset="true" 
          requiresQuestionAndAnswer="true" 
          requiresUniqueEmail="true" 
          passwordFormat="Hashed"/>
            </providers>
        </membership>
        <!-- Membership end-->

同時在<connectionStrings>節點中配置 資料庫連接字串

<add name="MySqlConnection" connectionString="Data Source=localhost;Initial Catalog=aspnetdb;Persist Security Info=True;User ID=sa;Password=123"/>

在使用Membership.CreateUser時,表aspnet_Applications按照配置membership節點中的applicationName產生一筆記錄,同時aspnet_Users和aspnet_Membership各產生一筆記錄。在使用Roles.AddUserToRole()時,筆者故意將username寫錯,結果插入成功,aspnet_User產生一筆記錄,aspnet_UsersInRoles也有記錄,也就是說,當使用Roles.AddUserToRole()時,不管User是否在Membership中,都會成功加入到Roles中,不會是微軟提供的邏輯搞錯了?
      注意到Membership和Roles資料在一個DB中,能否分開?測試結果是可以的。使用aspnet_regsql -E -S testServer -A r在testServer上建立Roles相關表及庫。增加資料庫連接節點<add name="RoleSqlConnection" ....>同時把RoleManager中的connectionStringName改為RoleSqlConnection.調用Roles.AddUserToRole(),aspnet_User表中同樣產生記錄而不檢查aspnet_Membership.
      個人覺得這樣處理有利也有弊,分開儲存在企業大型應用中可能會用得到,提高效率,但是一般小型系統中,如果程式員在寫入權限管理,調用AddUserToRole(),忘了做檢查,就容易造成資料混亂。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.