Shizuku Blog ~ techbank.jp版~

~女性エンジニア けろ-みおの苦悩~

ログイン | ID登録 | ヘルプ


ニュース


当Blogにについて

当Blogは、けろ-みおが備忘録として活用しているBlogになります。掲載している内容について、必ずしも正しい情報を公開しているわけではありませんので予めご了承下さい。
当Blogで公開している記事に対して、質問がある場合は、techbank.jp掲示板でお問い合わせ頂くか、techbank.jp ID申請を行い、IDを作成した段階で当Blogにコメントする等してください。
原則、正体がわからない方からのBlogコメント欄を使ったご質問・ご指摘は、承っておりません。
コメント投稿・公開(承認)基準につきましては、 当Blogのコメント投稿についてをご確認ください。
テクニカルコミュニティ(techbank.jp)に設置しているBlogということもあり、皆様のご理解とご協力の程、宜しくお願いします。

自己紹介

けろ-みおと申します。「techbank.jp」の副管理人をやっております。

MVP Profile

0







けろ-みおの関連サイト





このBlogの人気度
フィードメーター - techbank.jpコミュニティ

techbank.jp Blog全体と近いBlog
あわせて読みたいブログパーツ

このBlogと近いBlog
あわせて読みたいブログパーツ

Blog購読者数
スカウター : techbank.jp







WebPartZoneコントロールをパーソナル化するための下準備(SQL Providerを任意のDBに格納するための下準備)~レンタルサーバーへのデータ移行~

<この記事は、かつて、わんくまBlogで掲載していたものです。こちらに一部内容をアレンジして移行致します。>

 

ネタ元: ASP.NET: WebPartZoneコントロール (けろ-みお)

 

前回、WebPartZoneコントロールを使った例をご紹介したのですが、

WebPartZoneコントロール内に貼り付けているコントロールを「最小化」、「閉じる」をしたりするには、

「パーソナル化」(Personalize)が必要だと説明しました。

 

「パーソナル化」(Personalize)をサポートすると、コントロールがあるページにアクセスする度、

前回設定した情報(最小化とか閉じるの状態)を取得したり、また、ログアウト後も

状態を永続的に保存するため、セッション等の一時的な保存エリアではなく、

App_Dataフォルダの下に、「SQL Server Express データベース ファイル」(ASPNETDB.MDF)が自動的に作成され、

ASPNETDB.MDF内に、「パーソナル化」(Personalize)した状態がSQL Provider経由で、保存されます。

 

しかし、稼動サーバー(特にレンタルサーバー)の制限やセキュリティ上の問題等により、App_Dataフォルダの自動作成や

「SQL Server Express データベース ファイル」(ASPNETDB.MDF)の自動作成を認めていないサーバーもあります。

 

今回、Personalizeした情報を、ASPNETDB.MDF ではなく、

任意のサーバーに設置されているDBサーバ&SQL Server データベースに保存するやり方を説明します。

 

■実行サンプルをとにかく早く見たい方

サンプルだけでも先に見せなさいよ!待ちきれないだぜ!ちくしょーww という方は、

    http://techbank.jp/WebPartsSample/

に実行サンプルがありますので、そに実行サンプルがありますので、そちらでご確認ください。

     ユーザ: mio@techbank.jp

    パスワード:1234-5678

で、ログインすると、見れます。

(各WebPartsの閉じるボタンは、押さないで下さい。のちに押しても大丈夫なように対応します)

 

アクセスするのも面倒だぜぃ~って人には、下記が実行イメージです。

 

特に、今エントリでは、下準備(データ移行等)がいろいろと必要&長くなりそうなので、今回のエントリは、

その下準備手順だけにします。

 (実際、任意のDBサーバーでPersonalizeした情報をASP.NETで、保持するやり方については、

  次回のBlogエントリで説明します)

 

■手順1

☆稼動サーバーに、ターミナルクライアント、リモートデスクトップ接続で、つなげられる場合:

    「aspnet_regsql.exe」コマンドで、ASP.NETの「Form認証」に必要なテーブルまたはデータベースを作成します。

    詳しくは、ASP.NET SQL Server 登録ツール (Aspnet_regsql.exe) をご覧下さい。

    通常、「aspnet_regsql.exe」は、「%windir%\Microsoft.NET\Framework\v2.0.50727」の下にあります。

    (インストール環境によっては、異なることもあり)

 

☆稼動サーバーに、ターミナルクライアント、リモートデスクトップ接続で、つなげられない場合:

    作業用クライアントPC上で、「aspnet_regsql.exe」コマンドを実行します。

    (SQL Provider(Form認証等)が使用する必要なテーブルを一発作成するための、SQLスクリプトを自動生成します。)

    通常、「aspnet_regsql.exe」は、「%windir%\Microsoft.NET\Framework\v2.0.50727」の下にあります。

 

    書式:aspnet_regsql.exe -sqlexportonly [パス\ファイル名] -A all -d [DB名]

    実行例:aspnet_regsql.exe -sqlexportonly "C:\aspnet.sql" -A all -d Database1

 

    すると、SQL Server用のテーブルやビュー、ストアド、ロールを作成するスクリプト(この例だと、aspnet.sql) が、

    生成されます。

    対象テーブル、ストアド、ビュー、ロールは、下記の通りです。


テーブル
aspnet_Applications
aspnet_Membership
aspnet_Paths
aspnet_PersonalizationAllUsers
aspnet_PersonalizationPerUser
aspnet_Profile
aspnet_Roles
aspnet_SchemaVersions
aspnet_Users
aspnet_UsersInRoles
aspnet_WebEvent_Events


ビュー
vw_aspnet_Applications
vw_aspnet_MembershipUsers
vw_aspnet_Profiles
vw_aspnet_Roles
vw_aspnet_Users
vw_aspnet_UsersInRoles
vw_aspnet_WebPartState_Paths
vw_aspnet_WebPartState_Shared
vw_aspnet_WebPartState_User


ロール
aspnet_Membership_FullAccess
aspnet_Membership_BasicAccess
aspnet_Membership_ReportingAccess
aspnet_Profile_FullAccess
aspnet_Profile_BasicAccess
aspnet_Profile_ReportingAccess
aspnet_Roles_FullAccess
aspnet_Roles_BasicAccess
aspnet_Roles_ReportingAccess
aspnet_Personalization_FullAccess
aspnet_Personalization_BasicAccess
aspnet_Personalization_ReportingAccess
aspnet_WebEvent_FullAccess
ストアド
aspnet_AnyDataInTables
aspnet_Applications_CreateApplication
aspnet_CheckSchemaVersion
aspnet_Membership_ChangePasswordQuestionAndAnswer
aspnet_Membership_CreateUser
aspnet_Membership_FindUsersByEmail
aspnet_Membership_FindUsersByName
aspnet_Membership_GetAllUsers
aspnet_Membership_GetNumberOfUsersOnline
aspnet_Membership_GetPassword
aspnet_Membership_GetPasswordWithFormat
aspnet_Membership_GetUserByEmail
aspnet_Membership_GetUserByName
aspnet_Membership_GetUserByUserId
aspnet_Membership_ResetPassword
aspnet_Membership_SetPassword
aspnet_Membership_UnlockUser
aspnet_Membership_UpdateUser
aspnet_Membership_UpdateUserInfo
aspnet_Paths_CreatePath
aspnet_Personalization_GetApplicationId
aspnet_PersonalizationAdministration_DeleteAllState
aspnet_PersonalizationAdministration_FindState
aspnet_PersonalizationAdministration_GetCountOfState
aspnet_PersonalizationAdministration_ResetSharedState
aspnet_PersonalizationAdministration_ResetUserState
aspnet_PersonalizationAllUsers_GetPageSettings
aspnet_PersonalizationAllUsers_ResetPageSettings
aspnet_PersonalizationAllUsers_SetPageSettings
aspnet_PersonalizationPerUser_GetPageSettings
aspnet_PersonalizationPerUser_ResetPageSettings
aspnet_PersonalizationPerUser_SetPageSettings
aspnet_Profile_DeleteInactiveProfiles
aspnet_Profile_DeleteProfiles
aspnet_Profile_GetNumberOfInactiveProfiles
aspnet_Profile_GetProfiles
aspnet_Profile_GetProperties
aspnet_Profile_SetProperties
aspnet_RegisterSchemaVersion
aspnet_Roles_CreateRole
aspnet_Roles_DeleteRole
aspnet_Roles_GetAllRoles
aspnet_Roles_RoleExists
aspnet_Setup_RemoveAllRoleMembers
aspnet_Setup_RestorePermissions
aspnet_UnRegisterSchemaVersion
aspnet_Users_CreateUser
aspnet_Users_DeleteUser
aspnet_UsersInRoles_AddUsersToRoles
aspnet_UsersInRoles_FindUsersInRole
aspnet_UsersInRoles_GetRolesForUser
aspnet_UsersInRoles_GetUsersInRoles
aspnet_UsersInRoles_IsUserInRole
aspnet_UsersInRoles_RemoveUsersFromRoles
aspnet_WebEvent_LogEvent

 

以前、MSDNフォーラムにも投稿したんですが、このaspnet_regsqlで生成されるテーブルの仕様書、

ストアドの仕様書がやはり欲しいという人は多いみたいです。

今度、暇みて、日本語訳やってみるかなぁ。

マイクロソフトがやらないんだったら、やるっきゃないっしょw

 

■ 手順2

  (稼動サーバーに、ターミナルクライアント、リモートデスクトップ接続で、aspnet_regsql.exeを動かして、実際にDBやテーブルを作った方は、手順2は不要)

 

手順1で作成した、SQLスクリプト(今回だと、aspnet.sql)を、稼動サーバー側で用意されているツール

(myLittleAdmin for SQL Server 2005 等)を使って実行する。

また、稼動サーバーだけでなく、下準備をしている作業用クライアントPCにも、

SQL Server の Management Studio(2005の場合) や Enterprise Manager(2000の場合) を使って、

SQLスクリプト(aspnet.sql)を実行し、SQL Providerが使用する必要なテーブルやビュー、ストアド等を作成しておきます。

(手順3以降で必要になります)

 

       

 

■ 手順3

次に、ASP.NETがSQL Provider経由で、Form認証できる、ログイン可能ユーザを最低1ユーザは作成しておきます。

 

     ☆ VS.NETのソリューションエクスプローラーの上にある「ASP.NET構成」アイコンをClick!

       

 

    ☆  セキュリティをClickし、ユーザを作成する。(とりあえず、今回は、ロールなし のユーザを作成しておく)

        

 「セキュリティ」をClick

         

「ユーザーの作成」をClick

          

ここで、ユーザ情報を入力し、「ユーザーの作成」ボタンを押す

 

■手順4

手順3で作ったユーザ情報は、手順2で作成した「aspnet_Applications」「aspnet_Users」「aspnet_Membership」テーブルに、

情報が格納されています。

 

# ロール情報を付与している場合は、他にも格納されているテーブルがあります。今回は、ロールなしの場合で説明します。

 

「aspnet_Applications」「aspnet_Users」「aspnet_Membership」テーブルに格納されているユーザー情報を

稼動サーバーに移行したいので、ちょっと面倒ですが、

「aspnet_Applications」「aspnet_Users」「aspnet_Membership」テーブルに登録されているデータを元に、

下記のようなイメージで、ユーザ情報移行用SQL(INSERT文)を作業用クライアントPC側で、作成しておきます。

 

/************************************************************/
/* Form認証対象のWebアプリケーション(仮想ディレクトリ登録)*/
/************************************************************/
INSERT INTO [dbo].[aspnet_Applications]
        (
            [ApplicationName],
            [LoweredApplicationName],
            [ApplicationId],
            [Description]
        )
        VALUES 
        (
            '/WebPartsSample',                      -- [ApplicationName]
            '/webpartssample',                      -- [LoweredApplicationName]
            '281c03a9-a459-4b2a-ac02-b1bfdffe50f9', -- [ApplicationId]
            NULL                                    -- [Description]
        )
            
GO
/*******************************************************/
/* Form認証対象のWebアプリケーションにユーザを登録する */
/*******************************************************/
INSERT INTO [dbo].[aspnet_Users]
    (
        [ApplicationId],
        [UserId],
        [UserName],
        [LoweredUserName],
        [MobileAlias],
        [IsAnonymous],
        [LastActivityDate]
    )
     VALUES
    (
        '281c03a9-a459-4b2a-ac02-b1bfdffe50f9',     -- [ApplicationId]
        '48d45196-6a3d-41c4-89ba-73fbae197232',     -- [UserId]
        'mio@techbank.jp',                          -- [UserName]
        'mio@techbank.jp',                          -- [LoweredUserName]
        NULL,                                       -- [MobileAlias]
        0,                                          -- [IsAnonymous]
        '2008/01/03 7:53:03'                        -- [LastActivityDate]
    )
GO
/*******************************************************/
/* Form認証対象のユーザに対するパスワードを登録する    */
/*******************************************************/
INSERT INTO [dbo].[aspnet_Membership]
    (
        [ApplicationId],
        [UserId],
        [Password],
        [PasswordFormat],
        [PasswordSalt],
        [MobilePIN],
        [Email],
        [LoweredEmail],
        [PasswordQuestion],
        [PasswordAnswer],
        [IsApproved],
        [IsLockedOut],
        [CreateDate],
        [LastLoginDate],
        [LastPasswordChangedDate],
        [LastLockoutDate],
        [FailedPasswordAttemptCount],
        [FailedPasswordAttemptWindowStart],
        [FailedPasswordAnswerAttemptCount],
        [FailedPasswordAnswerAttemptWindowStart],
        [Comment]
    )
    VALUES
    (
        '281c03a9-a459-4b2a-ac02-b1bfdffe50f9',     -- [ApplicationId]
        '48d45196-6a3d-41c4-89ba-73fbae197232',     -- [UserId]
        'E4DRw4Fo7L1LPQTM/yK3fqLmOiY=',             -- [Password]
        1,                                          -- [PasswordFormat]
        'J+o3XzIPmOE2HmgmpKCJIQ==',                 -- [PasswordSalt]("1234-5678"と書いてあるw)
        NULL,                                       -- [MobilePIN]
        'mio@techbank.jp',                          -- [Email]
        'mio@techbank.jp',                          -- [LoweredEmail]
        'What''s Your Name?',                       -- [PasswordQuestion]
        'bnLGuqeo6F57JsP6QHUSB9CnF/s=',             -- [PasswordAnswer]("けろ"と書いてあるw)
        1,                                -- [IsApproved]
        0,                                -- [IsLockedOut]
        '2008/01/03 7:53:03',             -- [CreateDate]
        '2008/01/03 7:53:03',             -- [LastLoginDate]
        '2008/01/03 7:53:03',             -- [LastPasswordChangedDate]
        '1754/01/01 0:00:00',             -- [LastLockoutDate]
        0,                                -- [FailedPasswordAttemptCount]
        '1754/01/01 0:00:00',             -- [FailedPasswordAttemptWindowStart]
        0,                                -- [FailedPasswordAnswerAttemptCount]
        '1754/01/01 0:00:00',       -- [FailedPasswordAnswerAttemptWindowStart]
        NULL                              -- [Comment]
    )

 

 

■手順5

手順4で作成したユーザー情報登録SQLを、稼動サーバー側で用意されているツール(myLittleAdmin for SQL Server 2005 等)を使って実行する。

       

 

これで、下準備完了です。任意のデータベースサーバーやDBに、WebPartZoneでPersonalizeさせた情報を

保存させる環境は整いました。

レンタルサーバーや、稼動サーバーに制限があると、本当面倒ですね。

 

後は、Form認証 + ログインコントロール(たしか、わんくまにいる、のんちゃんが以前Blogで紹介してた記憶あり。)で、

認証させてた後、SQL Provider経由で、WebPartZoneコントロールを、パーソナル化(Personalize)させる方法をご紹介します。

(Web.Configの設定方法がメインですね)

長いエントリで失礼しました。


Published 2008年6月16日 16:57 けろ-みお

コメント

このBlogに対するコメントはありません

コメントを残す

(必須) 
(必須) 
(オプション)
(必須)