Deploy Visual Studio 2005 ASPNETDB.MDF to SQL2005
30 December 2005ASP.NET 2.0有一個新的feature叫membership service, 可以透過database管理一個web application的member和role, 實行website個人化和權限管理等.
使用Visual Studio 2005的話輕易使用這個功能. 在open project後於Top menu 中選Website–>ASP.NET Configuration, 會開啟了一張web form 叫 "Web Site Administration Tool". 在這兒可以新增/管理users和role等等, 亦可在此管理connectionstrings和SMTP setting. 隨便create一個users和role, Visual Studio 2005會自動產生一個叫ASPNETDB.MDF的SQLExpress DB放在App_Data folder之下. 用Visual Studio中的Server Explorer可以查詢ASPNETDB.MDF的結構和資料, 你可在此找到你剛剛輸入的user/role等.
因為工作的關係, 本人要解決一個問題, 就是要把這個ASPNETDB.MDF轉移到SQL 2005 Server上. 這樣做有三個用途:
1. server不support SQLExpress… 一定要用sql 2005 (別問我為什麼, 這是我的工作環境)
2. 當db需要被數個不同project或application共用, 放在folder中的ASPNETDB.MDF用起來不方便.
3. 始終SQL 2005比SQLExpress強大得多, 有些動作是必須要用上SQL 2005的
怎樣把ASPNETDB.MDF放到sql 2005上呢? 曾經以為兩者架構相同, 把mdf file直接attach到sql 2005就可以, 但實際上有兩個問題要解決. 一是需要改config, 使application知道db放到哪兒. 二是要改permission, 讓asp.net的application能夠寫入資料. 光是想就夠煩了, 還是留給其他人去煩. 所以我決定直接改用sql2005來裝membership資料.
用sql2005來裝membership, 有三個部驟:
1. create一個新的sql2005 db, 或直接用webapplication源用那一個.
2. 開啟C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727, 執行aspnet_regsql.exe, 會顯示以下的GUI:
一路輸入不同的資料和按next, 便會在你指定的db中create 11個table, (aspnet_membership,aspnet_roles,aspnet_profile….etc). 如果你是使用已有資料的db時, 請注意table名稱不要撞名. 如果用command line的話, 可以選擇性加入個別table, 詳情可以參考HERE
3. 在web.config中修改<roleManager> Tab. 如果你跟我在章頭所寫去做的話, by default role manager是這樣的:
<roleManager enabled="true" /> <!– 就這樣一句……. –>
將rolemanager tab改成:
<roleManager enabled="true" defaultProvider="SqlProvider" >
<providers>
<add
name="SqlProvider"
type="System.Web.Security.SqlRoleProvider"
connectionStringName="sqlConn"
applicationName="myApplication"
/>
</providers>
</roleManager>
注意sqlConn是你的connectionstrings名, 是在web.config中的<connectionStrings>中define的. <connectionStrings>是asp.net 2.0的新tab, 詳情有機會再講(或者你自己問google吧!
) sqlConn當然是連到步驟2中的db.
4. 然後要在web.config中找<membership>tab replace以下, 如果沒有的話隨便貼在<roleManager>TAB後面就可以:
<membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="15">
<providers>
<add
name="SqlProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="sqlConn"
applicationName="HR"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="true"
requiresUniqueEmail="false"
passwordFormat="Hashed"
maxInvalidPasswordAttempts="5"
minRequiredPasswordLength="3"
minRequiredNonalphanumericCharacters="0"
passwordAttemptWindow="10" />
</providers>
</membership>
你亦可以修改裡面的parameter, 例如"minRequiredNonalphanumericCharacters"是create user password的規則, NonalphanumericCharacters是指!$#%^&)這些.
完成後回到Visual Studio 2005, 於Top menu 中選Website—>ASP.NET Configuration, 隨便add些user和role, 看看資料有沒有加到你的sql2005 db中, 之後設定便完成了!
如果想把aspnetdb.mdf的資料放到sql2005 db中, 我相信用copy & paste(透過management studio)就可以…. 或者用DTS (在management studio中叫"export data")應該都冇問題…. 以上兩個方法未經証實, 如果你成功的話請告訴我!