セキュリティ拡張機能のサンプル

更新 : 2005 年 12 月 5 日

CustomSecurity サンプル セキュリティ拡張機能は、SQL Server とフォーム認証を使用して、Reporting Services と連動するカスタム セキュリティ モデルを提供します。このサンプルは、Itanium ベースのオペレーティング システムではサポートされていません。

SQL Server サンプルは、セットアップ中に自動的にインストールされません。これらのサンプルをインストールする方法の詳細については、「サンプルのインストール」を参照してください。

ms160724.security(ja-jp,SQL.90).gifセキュリティ メモ :
セキュリティ拡張機能のサンプルは、運用環境での配置やテストを行わないでください。異なるセキュリティ拡張機能に移行した後で Windows 認証に戻ることは、一般に推奨されません。これを行った場合、Windows 認証のセキュリティ記述子ではない、カスタムのセキュリティ記述子を持つレポート サーバー データベースのアイテムにアクセスしようとしたときにエラーが発生する可能性があり、Windows 認証に戻るには、Reporting Services を再インストールして、Windows ユーザーのすべてのロールベースのセキュリティを手動で適用し直す必要が生じます。このサンプルを使用する前に、構成ファイルをバックアップしてください。
ms160724.note(ja-jp,SQL.90).gif重要 :
サンプルは、学習に使用することのみを目的に提供されています。これらは、運用環境での使用を目的としたものではなく、運用環境でのテストも実施されていません。マイクロソフトからは、これらのサンプルについてのテクニカル サポートは提供されません。サンプル アプリケーションおよびサンプル アセンブリは、システム管理者の許可なしに、運用中の SQL Server データベースやレポート サーバーに接続しないようにしてください。

必要条件

CustomSecurity サンプルを実行するには、Visual Studio および Visual C# または Visual Basic について理解し、次のアプリケーションをインストールしておく必要があります。

  • Microsoft Visual Studio 2005 または互換性のある開発環境 (プロジェクト ファイル表示用)。
  • Microsoft .NET Framework Version 2.0。
  • SQL Server 2005 (Reporting Services を含む)。
  • Reporting Services のサンプル。
  • アクセス権を持つネットワーク上のレポート サーバー (このサンプル拡張機能を使用して、他のデータ処理機能をサーバーに追加する場合)。

場所

既定では、このサンプルは Reporting Services サンプル ディレクトリの Extension Samples\FormsAuthentication Sample サブディレクトリにあります。

C:\Program Files\Microsoft SQL Server\90\Samples\Reporting Services\Extension Samples\FormsAuthentication Sample

サンプルのビルド

まず、拡張機能のコンパイルとインストールを行う必要があります。この手順は、Reporting Services が既定の場所である C:\Program Files\Microsoft SQL Server\MSSQL.3\Reporting Services にインストールされていることを前提としています。このトピックではこれ以降、この場所を <インストール> と呼びます。

強力な名前のキー ファイルをまだ作成していない場合は、次の指示に従ってキー ファイルを生成してください。

厳密な名前のキー ファイルを生成するには

  1. Microsoft Visual Studio 2005 コマンド プロンプトを開きます。[スタート] メニューの [すべてのプログラム] をポイントし、[Microsoft .NET Framework SDK 2.0] をポイントします。次に、[SDK コマンド プロンプト] をクリックします。

    -- または --

    Microsoft .NET Framework コマンド プロンプトを開きます。[スタート] メニューの [すべてのプログラム] をポイントし、[Microsoft .NET Framework SDK 2.0] をポイントします。次に、[SDK コマンド プロンプト] をクリックします。

  2. ディレクトリの移動コマンド (CD) を使用して、コマンド プロンプト ウィンドウの現在のディレクトリから、サンプルがインストールされているフォルダに移動します。

    ms160724.note(ja-jp,SQL.90).gif注 :
    サンプルが配置されているフォルダを調べるには、[スタート] ボタンをクリックし、[すべてのプログラム]、[Microsoft SQL Server]、[マニュアルとチュートリアル] の順にポイントして、[サンプル ディレクトリ] をクリックします。既定のインストール場所を使用している場合、サンプルは <system_drive>:\Program Files\Microsoft SQL Server\100\Samples にあります。
  3. コマンド プロンプトで、次のコマンドを実行してキー ファイルを生成します。

    sn -k SampleKey.snk

    ms160724.note(ja-jp,SQL.90).gif重要 :
    厳密な名前のキー ペアの詳細については、MSDN の .NET Development Center にある「Security Briefs: Strong Names and Security in the .NET Framework」を参照してください。

Visual Studio 2005 を使用してこのサンプルをコンパイルするには

  1. Microsoft Visual Studio 2005 で CustomSecurity.sln を開きます。サンプルを既定の場所にインストールした場合、このファイルは C:\Program Files\Microsoft SQL Server\MSSQL\Reporting Services\Samples\Extensions に配置されています。

  2. ソリューション エクスプローラで、CustomSecurity プロジェクトを選択します。

  3. [プロジェクト] メニューの [参照の追加] をクリックします。

    [参照の追加] ダイアログ ボックスが表示されます。

  4. [.NET] タブをクリックします。

  5. [参照] をクリックし、ローカル ドライブにある Microsoft.ReportingServices.Interfaces に移動します。既定では、アセンブリは <インストール>\ReportServer\bin ディレクトリにあります。[OK] をクリックします。

    選択した参照が、プロジェクトに追加されます。

  6. [ビルド] メニューの [ソリューションのビルド] をクリックします。

サンプルの配置

サンプルがコンパイルされた後、レポート サーバーの適切なサブディレクトリに DLL と ASPX ページをコピーする必要があります。

サンプルを配置するには

  1. Microsoft.Samples.ReportingServices.CustomSecurity.dll と Microsoft.Samples.ReportingServices.CustomSecurity.pdb を <インストール>\ReportServer\bin ディレクトリにコピーします。

  2. Microsoft.Samples.ReportingServices.CustomSecurity.dll と Microsoft.Samples.ReportingServices.CustomSecurity.pdb を <インストール>\ReportManager\bin ディレクトリにコピーします。

  3. Logon.aspx ページを <インストール>\ReportServer ディレクトリにコピーし、UILogon.aspx ページを <インストール>\ReportManager\Pages ディレクトリにコピーします。

アセンブリとログオン ページがサーバーにコピーされた後、レポート サーバーとレポート マネージャの構成ファイルにいくつかの変更を行う必要があります。

ms160724.note(ja-jp,SQL.90).gif重要 :
変更を行う前に、すべての構成ファイルのバックアップ コピーを作成してください。

RSReportServer.config ファイルを変更するには

  1. Visual Studio 2005 またはメモ帳などのシンプル テキスト エディタを使って RSReportServer.config ファイルを開きます。RSReportServer.config は <インストール>\ReportServer ディレクトリにあります。

  2. <Security> 要素と <Authentication> 要素を検索して、次のように設定を変更します。

    <Security>
       <Extension Name="Forms" 
    Type="Microsoft.Samples.ReportingServices.CustomSecurity.Authorization, 
    Microsoft.Samples.ReportingServices.CustomSecurity" >
          <Configuration>
             <AdminConfiguration>
                <UserName>username</UserName>
             </AdminConfiguration>
          </Configuration>
       </Extension>
    </Security>
    <Authentication>
       <Extension Name="Forms" 
    Type="Microsoft.Samples.ReportingServices.CustomSecurity.AuthenticationExtension,
     Microsoft.Samples.ReportingServices.CustomSecurity" />
    </Authentication>
    

    .NET Framework セキュリティと Reporting Services の詳細については、「Reporting Services のコード アクセス セキュリティの理解」を参照してください。

RSWebApplication.config ファイルを変更するには

  1. 次に、<インストール>\ReportManager ディレクトリにある、レポート マネージャ構成ファイルの RSWebApplication.config を開きます。

  2. <UI> 要素を検索して、次のように変更します。

    <UI>
       <CustomAuthenticationUI>
          <loginUrl>/Pages/UILogon.aspx</loginUrl>
             <UseSSL>True</UseSSL>
       </CustomAuthenticationUI>
       <ReportServerUrl>http://<server>/ReportServer</ReportServerUrl>
    </UI>
    
ms160724.note(ja-jp,SQL.90).gifメモ :
Secure Sockets Layer (SSL) 証明書がインストールされていない開発環境でサンプル セキュリティ拡張機能を実行する場合、上記の構成エントリの <UseSSL> 要素の値を False に変更する必要があります。Reporting Services とフォーム認証を組み合わせる場合、常に SSL を使用することを推奨します。

拡張機能に対して FullTrust 権限を付与するカスタム セキュリティ拡張機能にコード グループを追加する必要があります。これは、rssrvpolicy.config ファイルにコード グループを追加することによって行います。

RSSrvPolicy.config ファイルを変更するには

  1. <インストール>\ReportServer ディレクトリにある rssrvpolicy.config ファイルを開きます。

  2. セキュリティ ポリシー ファイル内で、以下に示すように URL メンバシップが $CodeGen である既存のコード グループを探し、下のエントリを rssrvpolicy.config に追加します。

    ms160724.note(ja-jp,SQL.90).gifメモ :
    Analysis Services がインストールされている場合は、Url="C:\Program Files\Microsoft SQL Server\MSSQL.2\Reporting Services\ReportServer\bin\Microsoft.Samples.ReportingServices.CustomSecurity.dllMSSQL.3 に変更する必要があります。
    <CodeGroup
       class="UnionCodeGroup"
       version="1"
       PermissionSetName="FullTrust">
       <IMembershipCondition 
          class="UrlMembershipCondition"
          version="1"
          Url="$CodeGen$/*"
       />
    </CodeGroup>
    <CodeGroup
       class="UnionCodeGroup"
       version="1"
       Name="SecurityExtensionCodeGroup"
       Description="Code group for the sample security extension"
       PermissionSetName="FullTrust">
       <IMembershipCondition 
          class="UrlMembershipCondition"
          version="1"
          Url="C:\Program Files\Microsoft SQL Server\MSSQL.2\Reporting Services\ReportServer\bin\Microsoft.Samples.ReportingServices.CustomSecurity.dll"
       />
    </CodeGroup>
    
ms160724.note(ja-jp,SQL.90).gifメモ :
単純にするために、フォーム認証サンプルは弱い名前が付けられ、セキュリティ ポリシー ファイルに簡単な URL メンバシップ エントリが必要とされます。実稼働セキュリティ拡張機能実装では、アセンブリにセキュリティ ポリシーを追加するときに、厳密な名前のアセンブリを作成して、厳密な名前のメンバシップ条件を使用する必要があります。厳密な名前のアセンブリの詳細については、MSDN の「厳密な名前付きアセンブリの作成と使用」を参照してください。

次に、レポート マネージャ ポリシー ファイルで "My Computer " コード グループの権限を増やす必要があります。

RSMgrPolicy.config ファイルを変更するには

  1. <インストール>\ReportManager ディレクトリにある、レポート マネージャ ポリシー ファイルの rsmgrpolicy.config を開きます。

  2. rsmgrpolicy.config で次のコード グループを検索し、次のようにして、Execution から FullTrustPermissionSetName 属性を変更します。

    <CodeGroup 
            class="FirstMatchCodeGroup" 
            version="1" 
            PermissionSetName="FullTrust"
            Description="This code group grants MyComputer code Execution 
    permission. ">
        <IMembershipCondition 
                class="ZoneMembershipCondition"
                version="1"
                Zone="MyComputer" />
    

フォーム認証を使用するには、認証モードの変更と権限の借用の無効化を行うため、レポート マネージャとレポート サーバーの Web.config ファイルを変更する必要があります。

レポート サーバーの Web.config ファイルを変更するには

  1. テキスト エディタで Web.config ファイルを開きます。既定では、ファイルは <インストール>\ReportServer ディレクトリにあります。

  2. <identity> 要素を検索して、Impersonate 属性を false に設定します。

    <identity impersonate="false" />
    
  3. <authentication> 要素を検索して、Mode 属性を Forms に変更します。

  4. 次の <forms> 要素を <authentication> 要素の子要素として追加し、loginUrlnametimeout、および path 属性を次のように変更します。

    <authentication mode="Forms">
       <forms loginUrl="logon.aspx" name="sqlAuthCookie" timeout="60" 
                   path="/"></forms>
       </authentication>
    
  5. <authentication> 要素の直後に、次の <authorization> 要素を追加します。

    <authorization> 
       <deny users="?" />
    </authorization>
    

    これにより、レポート サーバーへのアクセス権が認証されていないユーザーを拒否します。上で設定した <authentication> 要素の loginUrl 属性により、認証されていない要求が Logon.aspx ページにリダイレクトされます。

レポート マネージャの Web.config ファイルを変更するには

  1. レポート マネージャの Web.config を開きます。これは、<インストール>\ReportManager ディレクトリにあります。

  2. セクション <identity impersonate= "true" /> を検索して <identity impersonate="false" /> に変更することによって、権限の借用を無効化します。

匿名認証の構成

既定では、Windows ユーザー グループの Guest には、IUSR_computername アカウントが含まれます。このアカウントは、最初のログオンでローカルに使用され、Logon.aspx ページに表示されます。フォーム認証をサポートするには、ReportServer 仮想ディレクトリへの匿名アクセスを有効にする必要があります。既定では、匿名アクセスは無効です。

匿名認証を有効にするには

  1. インターネット インフォメーション サービスで、ReportServer 仮想ディレクトリ (通常は [既定の Web サイト] のメンバ) を選択し、[プロパティ] ダイアログ ボックスを表示します。

  2. [ディレクトリ セキュリティ] タブをクリックします。

  3. [匿名アクセスおよび認証コントロール] セクションで、[編集] をクリックします。

    [認証方法] ダイアログ ボックスが表示されます。

  4. [匿名アクセス] チェック ボックスをオンにします。

  5. [OK] をクリックします。

    Reports 仮想ディレクトリで、上記の手順を繰り返します。

UserAccounts データベースの作成

サンプルには、SQL Server データベースの Forms サンプルに対してユーザー ストアをセットアップできるようにする、データベース スクリプトの createuserstore.sql が含まれています。

UserAccounts データベースを作成するには

  1. SQL Server Management Studio を起動して、SQL Server のローカル インスタンスに接続します。

  2. createuserstore.sql SQL スクリプト ファイルを探します。スクリプト ファイルは、サンプル プロジェクト ファイル内に含まれます。

  3. スクリプトの終わりにある "LocalMachine" を探し、ユーザーのコンピュータ名に置き換えます。Windows 2003 ユーザーの場合は、LocalMachine\ASPNETNT AUTHORITY\NETWORK SERVICE に置き換えます (IIS 5 互換モードの場合を除く)。

  4. クエリを実行して UserAccounts データベースを作成します。

  5. SQL Server Management Studio を終了します。

サンプルのテスト

次の手順で、サンプル拡張機能をテストします。UserAccounts データベースの users テーブルに、ユーザー名、パスワード ハッシュ、および salt 値を追加するための管理者ユーザーを登録する必要があります。レポート サーバー構成ファイルにユーザー名を入力する必要もあります。パスワード検証ルーチンの正しい操作と、レポート サーバーによる拡張機能アセンブリの正しい読み込みを確実に行うため、同じユーザーでログオンします。

レポート プロジェクトを作成するには

  1. コマンド プロンプトで Iisreset.exe を実行して IIS を再起動します。

  2. レポート マネージャを開きます。これは、Reporting Services のプログラム メニュー、またはブラウザから Reports 仮想ディレクトリにアクセスすることによって行います。

  3. ユーザー名とパスワードを入力し、[ユーザーの登録] をクリックして accounts データベースにユーザーを追加します。

  4. RSReportServer.config ファイルを開きます。<Security> 要素を検索して、上で登録したユーザー名を次のように追加します。

    <Security>
       <Extension Name="Forms" 
    Type="Microsoft.Samples.ReportingServices.CustomSecurity.Authorization, 
    Microsoft.Samples.ReportingServices.CustomSecurity" >
          <Configuration>
             <AdminConfiguration>
                <UserName>username</UserName>
             </AdminConfiguration>
          </Configuration>
       </Extension>
    </Security>
    
  5. UILogon.aspx ページに戻り、ユーザー名とパスワードを再入力して、[ログオン] をクリックします。

レポート マネージャとレポート サーバーには制限なくアクセスできる必要があります。作成する管理者ユーザーは、ローカル コンピュータのこれらの組み込み管理者アカウントに対して、レポート サーバー上の権限と同じ権限を持ちます。このサンプルでは、管理者として指定できるのは 1 人のユーザーだけです。組み込み管理者アカウントを持つと、レポート サーバーでの追加ユーザーの登録やロールの割り当てを行うことができます。

ms160724.note(ja-jp,SQL.90).gifメモ :
レポート サーバーの公式なシステム管理者とコンテンツ マネージャ (ルート フォルダ) のロールに管理者ユーザーを追加する必要があります。これにより、空のセキュリティ記述子がレポート サーバー データベースに存在することを防ぎます。システム管理者とコンテンツ マネージャのロールの詳細については、「定義済みロールの概要」を参照してください。

カスタム セキュリティでの Web サービスの使用

Windows 認証と同様に、フォーム認証で Web サービス API を使用できます。ただし、Web サービス コードで LogonUser を呼び出して、現在のユーザーの資格情報を渡す必要があります。さらに、Web サービス クライアントは、Internet Explorer や他の Web ブラウザによって提供される、自動 Cookie 管理を利用できません。Cookie 管理を含めるには、Microsoft.ReportingServices プロキシ クラスを拡張します。これは、Web サービス クラスの GetWebRequest メソッドと GetWebResponse メソッドを上書きすることによって行います。

サンプル拡張機能のデバッグ

デバッガでのサンプル拡張機能の実行は、問題のトラブルシューティングを行うための優れた方法であるだけでなく、コードのステップ実行や、レポート サーバーの認証と承認プロセスで何が起こっているかを参照するための効果的な方法でもあります。

Microsoft .NET Framework は、サンプル コードの分析に役立つ、いくつかのデバッグ ツールを提供しています。次の手順では、Visual Studio 2005 を使用して上記のサンプルをデバッグします。

フォーム認証サンプル コードをデバッグするには

  1. Visual Studio を起動し、テスト レポート サーバーの CustomSecurity.sln を開きます。

  2. Visual Studio でサンプル コードを開いたまま、Internet Explorer を開いて Report Manager に移動します。

  3. Visual Studio に切り換えて、カスタム セキュリティ拡張機能プロジェクト コードにいくつかのブレーク ポイントを設定します。

  4. アクティブ ウィンドウのままの拡張機能プロジェクトで、[デバッグ] メニューから [処理] をクリックします。

    [処理] ダイアログ ボックスが表示されます。

  5. 処理の一覧から、Aspnet_wp.exe (アプリケーションが IIS 6.0 で配置されている場合は W3wp.exe) 処理を選択し、[アタッチ] をクリックします。

  6. [プロセスにアタッチ] ダイアログ ボックスで、プログラムの種類に [共通言語ランタイム] を選択して [OK] をクリックします。デバッグ パフォーマンスを向上させるには、プログラムの種類に [ネイティブ] を選択しないようにしてください。

  7. サンプルを実行するときに、ログオン フォームが表示されます。ログオン フォームにユーザー資格情報を入力して、[ログオン] をクリックします。

    デバッガは、処理中にブレーク ポイントを検出すると、その時点で実行を停止します。

  8. F11 キーを使用して、コードをステップ実行します。Visual Studio を使用するデバッグの詳細については、Visual Studio 2005 のドキュメントを参照してください。

ms160724.note(ja-jp,SQL.90).gifメモ :
この方法のデバッグには、多くのリソースとプロセッサ時間が必要です。問題が発生した場合、Visual Studio を終了して IIS をリセットし、ASP.NET ワーカー プロセスへの CustomSecurity ソリューションのアタッチと、レポート マネージャへのログオンを行って再開します。

サンプル拡張機能の削除

一般には推奨されませんが、サンプルを試した後で Windows 認証に戻すことも可能です。

Windows セキュリティに戻すには

  1. バックアップ コピーから、Web.config、RSReportServer.config、および RSWebApplication.config ファイルを復元します。これらのファイルの、レポート サーバーの認証と承認の方法を既定の Windows セキュリティに設定します。また、これらのファイルの、レポート サーバーまたはレポート マネージャの構成ファイルの拡張機能のために作成したすべてのエントリを削除します。

  2. レポート サーバー仮想ディレクトリに対するインターネット インフォメーション サービスの匿名アクセスを無効にします。

構成ファイルが削除された後、セキュリティ拡張機能はレポート サーバーに対して使用できなくなります。サンプル セキュリティ拡張機能でレポート サーバーを実行している間は、作成したセキュリティ記述子を削除しないでください。Windows 認証が有効になったとき、レポート サーバーは、レポート サーバーがホストするコンピュータの BUILTIN\Administrator グループにシステム管理者ロールを自動的に割り当てます。ただし、Windows ユーザーのすべてのロールベースのセキュリティを手動で適用し直すことになります。

異なるセキュリティ拡張機能に移行した後で Windows 認証に戻ることは、一般に推奨されないことに注意してください。これを行った場合、Windows 認証のセキュリティ記述子ではない、カスタムのセキュリティ記述子を持つレポート サーバー データベースのアイテムにアクセスしようとしたときにエラーが発生する可能性があります。

参照

処理手順

SQL Server Reporting Services サンプル

その他の技術情報

拡張機能サンプル (Reporting Services)
セキュリティ拡張機能の実装

ヘルプおよび情報

SQL Server 2005 の参考資料の入手

変更履歴

リリース 履歴

2005 年 12 月 5 日

変更内容 :
  • キー ファイルの名前や場所など、キー ファイルを生成する手順を変更しました。