サンプル ロール プロバイダの実装

更新 : 2007 年 11 月

サンプル ロール プロバイダおよびサポートされているデータ ソース スキーマについて説明します。

次の各トピックでは、サンプル ロール プロバイダを実装するためのコードについて説明します。サンプル プロバイダでは .NET Framework ODBC 用データ プロバイダを使用して ODBC データ ソースに接続します。このサンプルでは、データ ソースとして Access データベースを使用します。

このトピックでは、サンプル プロファイル プロバイダを実装して、サンプル プロバイダを使用するように ASP.NET アプリケーションを設定する方法を説明します。

tksy7hd7.alert_note(ja-jp,VS.90).gifメモ :

データ ソースはさまざまな SQL 構文を含むため、コマンドによっては特定のデータ ソースだけを使用し、別のデータ ソースを使用しないものもあります。そのため、.NET Framework ODBC 用データ プロバイダまたは .NET Framework OLEDB 用データ プロバイダを使用していても、SybaseProfileProvider や OracleProfileProvider などのデータ ソースにアクセスするには、データ ソースに固有のロール プロバイダを作成する必要があります。

サンプル プロバイダのコードを表示するには、「方法 : サンプル ロール プロバイダを実装する」を参照してください。

データベース スキーマ

サンプル ロール プロバイダでは、2 つのデータベース テーブルを使用してロール情報を管理します。つまり、ロール名とアプリケーション名を含む Roles テーブル、およびユーザー名をアプリケーションのロール名に関連付けるために使用される UsersInRoles テーブルです。

サンプル プロバイダで使用する Access テーブルを作成するには、新規または既存の Access データベースで次のデータ定義クエリを実行します。

CREATE TABLE Roles
(
  Rolename Text (255) NOT NULL,
  ApplicationName Text (255) NOT NULL,
    CONSTRAINT PKRoles PRIMARY KEY (Rolename, ApplicationName)
)

CREATE TABLE UsersInRoles
(
  Username Text (255) NOT NULL,
  Rolename Text (255) NOT NULL,
  ApplicationName Text (255) NOT NULL,
    CONSTRAINT PKUsersInRoles PRIMARY KEY (Username, Rolename, ApplicationName)
)

イベント ログへのアクセス

サンプル プロバイダはデータ ソースの使用時に例外を検出すると、ASP.NET アプリケーションに例外を返す代わりに、例外の詳細をアプリケーション イベント ログに書き込みます。これは、ASP.NET アプリケーション内のデータ ソースに関する個人情報が公開されないようにするためのセキュリティ対策として実行されます。

サンプル プロバイダは、"OdbcRoleProvider" という Source イベントを指定します。ASP.NET アプリケーションがアプリケーション イベント ログに正常に書き込むことができるようにするには、次のレジストリ キーを作成する必要があります。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\OdbcRoleProvider

サンプル プロバイダがイベント ログに例外を書き込まないようにするには、Web.config ファイルの writeExceptionsToEventLog 属性を false に設定します。

サンプル プロバイダのビルド

サンプル プロバイダを使用するには、アプリケーションの App_Code ディレクトリにソース コードを保存します。アプリケーションの App_Code ディレクトリに既にソース コードがある場合は、ディレクトリ内の既存のコードと同じ言語で記述されているサンプル プロバイダのバージョンを追加する必要があります。アプリケーションが要求されると、プロバイダは ASP.NET によってコンパイルされます。

また、サンプル プロバイダをライブラリとしてコンパイルして、これを Web アプリケーションの Bin ディレクトリに配置することも、厳密な名前を付けて GAC に配置することもできます。コマンド ライン コンパイラを使用してサンプル プロバイダをコンパイルするコマンドを次に示します。

vbc /out:OdbcRoleProvider.dll /t:library OdbcRoleProvider.vb /r:System.Web.dll /r:System.Configuration.dll
csc /out:OdbcRoleProvider.dll /t:library OdbcRoleProvider.cs /r:System.Web.dll /r:System.Configuration.dll

ASP.NET アプリケーションでのサンプル プロバイダの使用

ASP.NET アプリケーションでサンプル プロバイダを使用するように設定した Web.config ファイルの例を次に示します。この例では、"RolesDSN" という ODBC DSN を使用して Access データベースの接続情報を取得します。サンプル プロバイダを使用するには、"RolesDSN" というシステム DSN を作成するか、有効な ODBC 接続文字列をデータベースに提供する必要があります。

この構成例では、Web サイトがフォーム認証を使用するように設定されていて、ユーザーのログインを許可する login.aspx という ASP.NET ページを含むことを前提としています。

<configuration>
  <connectionStrings>
    <add name="OdbcServices" connectionString="DSN=RolesDSN;" />
  </connectionStrings>

  <system.web>
    <authentication mode="Forms" />
      <forms loginUrl="loginvb.aspx"
        name=".ASPXFORMSAUTH" />
    </authentication>

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

    <roleManager defaultProvider="OdbcRoleProvider" 
      enabled="true"
      cacheRolesInCookie="true"
      cookieName=".ASPROLES"
      cookieTimeout="30"
      cookiePath="/"
      cookieRequireSSL="false"
      cookieSlidingExpiration="true"
      cookieProtection="All" >
      <providers>
        <clear />
        <add
          name="OdbcRoleProvider"
          type="Samples.AspNet.Roles.OdbcRoleProvider"
          connectionStringName="OdbcServices" 
          applicationName="SampleApplication" 
          writeExceptionsToEventLog="false" />
      </providers>
    </roleManager>

  </system.web>
</configuration>

参照

概念

ロール プロバイダの実装

その他の技術情報

ロールを使用した承認の管理

ASP.NET Web サイトのセキュリティ