1.7 セキュアなマップ・レンダリング

Webユーザーの識別情報に基づいてセキュアなマップ・レンダリングを実装できます。

同じテーマを表示するときでも、ユーザー各自のロールや権限に応じて、表示される地物のセットを変えることができます。基本的な考え方は、Webユーザーがテーマを利用するためにデータベースにアクセスする場合、マップ・ビジュアライゼーション・コンポーネントでは常に特定のPL/SQLパッケージを起動してそのユーザーの識別情報をデータベース内に設定するということです。このユーザー情報は、データ・アクセス制御を行うためにデータベースで使用されます。

ノート:

この項では、「ユーザー」および「認証済ユーザー」という用語は、Oracle Fusion MiddlewareまたはOracle Single Sign-On (SSO)にログインするアプリケーションまたはWebユーザーを意味します。これは、データベース・ユーザーと同じではありません。マップ・ビジュアライゼーション・コンポーネント自体が、すべての地理空間データが格納されているデータベース・スキーマに直接接続します。

マップ・ビジュアライゼーション・コンポーネントは、すべての地理空間データが格納されているデータベース・スキーマに直接接続します。このスキーマ内のデータについて、マップ・ビジュアライゼーション・コンポーネントのアクセス制御を実施するには、次のステップを実行する必要があります。

  1. データベース・スキーマにPL/SQLパッケージを作成します。このパッケージには、少なくともset_user(username)およびclear_user()という2つのプロシージャを含める必要があります。

  2. PL/SQLパッケージに格納されるユーザー識別情報(データベース・セッションごとにset_userプロシージャを使用してマップ・ビジュアライゼーション・コンポーネントによって設定されます)に基づき、ビューの作成、データベース・オブジェクトに対するアクセス権の設定、およびその他のタスクを実行します。

  3. スキーマに対するマップ・ビジュアライゼーション・コンポーネント・データソースを作成し、データソース定義の一部としてPL/SQLパッケージの名前を指定します。これがセキュアなデータソースとみなされます。

  4. ステップ2で作成したビューを基にしてマップ・ビジュアライゼーション・コンポーネント・テーマを作成します。

  5. マップ・ビジュアライゼーション・コンポーネント・アプリケーションのページにアクセスするユーザー用のWeb認証を設定し、マップ・リクエストがマップ・ビジュアライゼーション・コンポーネント・サーブレットに届いたときに、Webセッション・オブジェクトに認証済ユーザーの識別情報が含まれるようにします。

  6. ステップ4で定義したテーマを表示するマップ・リクエストまたはFOI(対象地物)リクエストを、直接発行するか、またはベース・マップとOracle Mapsを使用して発行します。

    マップ・ビジュアライゼーション・コンポーネントでは、PL/SQLパッケージを使用してユーザー識別情報をデータベースに自動的に渡した後、これらのテーマに関する問合せを実行します。識別されたユーザーに対して表示可能な行のみがデータベースから返されて、マップ・ビジュアライゼーション・コンポーネントによってレンダリングされます。

「セキュアなマップ・レンダリングが機能する仕組み」では、セキュアなマップ・レンダリングが機能する仕組みについて説明し、実装の詳細といくつかの例を紹介します。「ユーザー認証のオプション」では、ユーザーを認証するためのいくつかのオプションを説明します。

1.7.1 セキュアなマップ・レンダリングが機能する仕組み

マップ・ビジュアライゼーション・コンポーネントは、Java EEアプリケーションとして、Oracle Fusion MiddlewareまたはOracle Single Sign-On (SSO)で認証済であるWebユーザーの識別情報を取得できます。このユーザー情報はデータベースに送ったり保存したりできます。データベースでは、このユーザー識別情報に基づいて、マップ層や表へのセキュア・アクセスを設定できます。たとえば、データベース管理者(DBA)は、特定のユーザーに対して表示できる空間地物のみを選択する実表のビューを作成することが可能です。

Oracle Fusion MiddlewareまたはOracle Single Sign-On (SSO)からデータベースにWebユーザーの識別情報を渡すには、データベースにユーザー識別情報を設定するセキュアなPL/SQLパッケージを使用します。このPL/SQLパッケージは、DBAまたはアプリケーション開発者が作成し、データソース・スキーマにインストールします。このようなパッケージには、プロシージャやファンクションをいくつ含めてもかまいませんが、少なくとも次の2つのプロシージャは必ず含める必要があります。

  • set_user(username)

  • clear_user()

セキュアなデータソースからテーマがリクエストされると、マップ・ビジュアライゼーション・コンポーネントでは、関連するPL/SQLパッケージのset_userプロシージャを起動した後でそのテーマに対するデータの問合せを実行します。テーマに対する問合せプロセスが完了すると、マップ・ビジュアライザはclear_userプロシージャを起動します。

PL/SQLパッケージをインストールした後、データソース定義の一部として、plsql_package属性を使用してこのパッケージの名前をマップ・ビジュアライゼーション・コンポーネントに渡せます(例1-5を参照)。

データソース定義にPL/SQLパッケージ名を指定すると、マップ・ビジュアライゼーション・コンポーネントは該当するデータソースをセキュアなデータソースとしてフラグ付けし、このデータソースでテーマの問合せを実行するときは常に、パッケージのset_userプロシージャおよびclear_userプロシージャを自動的に起動します。

例1-3 セキュアなマップ・レンダリング用のPL/SQLパッケージ

例1-3に、セキュアなマップ・レンダリング用として使用できるPL/SQLパッケージを示します。このパッケージは、MVDEMOサンプル・スキーマで作成できます。

例1-3では、set_userとclear_userが必須の2つのメソッドで、get_userは、ビューを作成したり他のデータ・アクセスを制御したりするために使用できる便宜的なファンクションです。

このパッケージ(基本的に現行のデータベース・セッションに対するユーザー識別情報を含む)を作成した後、このユーザー情報を使用する複雑な仮想プライベート・データベースを設定できます(Oracle Virtual Private DatabaseまたはVPDの詳細は、『Oracle Databaseセキュリティ・ガイド』を参照)。ただし、わかりやすくするため、この項ではVPDの作成については扱わず、このユーザー情報を使用してデータ・アクセス制御を行うビューを作成できることのみを示します。

たとえば、MVDEMOサンプル・スキーマ内の既存のCUSTOMERS表にACCOUNT_MGRという列を追加して、この表に格納されている各顧客にアカウント・マネージャを割り当てることができます。次に、特定のアカウント・マネージャに対して顧客の行のみを返すビューを作成します(例1-4を参照)。

CREATE OR REPLACE PACKAGE web_user_info
AS
    PROCEDURE set_user (p_name IN VARCHAR2);
    PROCEDURE clear_user;
    FUNCTION  get_user
        RETURN VARCHAR2;
END;
CREATE OR REPLACE PACKAGE BODY web_user_info
AS
    w_name VARCHAR2 (32767);
 
  PROCEDURE set_user (p_name IN VARCHAR2)
  AS
  BEGIN
     w_name := LOWER (p_name);
  END;
 
  PROCEDURE clear_user
  AS
  BEGIN
      w_name := null;
  END;
 
  FUNCTION get_user
    RETURN VARCHAR2
  AS
  BEGIN
    RETURN w_name;
  END;
END;
/

例1-4 セキュアなマップ・レンダリング用のビュー

CREATE OR REPLACE VIEW customers_view
AS
  SELECT * FROM customers
  WHERE account_mgr = web_user_info.get_user;

このビューを基にして、アカウント・マネージャがログインして顧客データをマップ上に表示する場合に、各自の担当する顧客しか表示されないようなマップ・ビジュアライゼーション・コンポーネント・テーマを定義することが可能になります。

例1-5 セキュアなマップ・レンダリング用のデータソース定義

<map_data_source name="mvdemo"
                 jdbc_host="system32.example.com"
                 jdbc_sid="mv"
                 jdbc_port="15214"
                 jdbc_user="mvdemo"
                 jdbc_password="password"
                 jdbc_mode="thin"
                 number_of_mappers="3"
                 allow_jdbc_theme_based_foi="true"
                 plsql_package="web_user_info"
   />

1.7.2 Cookieからのユーザー名の取得

認証済ユーザー情報は、Java EEやOSSOのセッションからマップ・ビジュアライゼーション・コンポーネントに渡されない場合があります。マップ・ビジュアライゼーション・コンポーネントをApplication Express (APEX)内に統合したときなどがそうですが、この場合、認証がAPEXにより行われるため、Java EEやOSSOのセッションからユーザー名を取得できません。この問題を回避するため、マップ・ビジュアライゼーション・コンポーネントではCookieからのユーザー名の取得もサポートしています。認証済ユーザー名を保持するためのAPEX内のCookieの設定は、各自の責任において行ってください。

指定したCookieからマップ・ビジュアライゼーション・コンポーネントがユーザー名を確実に取得するようにするには、データソース定義にweb_user_type属性を(必須のplsql_package属性に加えて)指定する必要があります。たとえば、マップ・ビジュアライゼーション・コンポーネントでMON_USERという名前のCookieからユーザー名を取得する場合は、セキュアなデータソース定義は例1-6のようになります。

例1-6 Cookie名を指定するデータソース定義

<map_data_source name="mvdemo"
                  jdbc_host="system32.example.com"
                  jdbc_sid="mv"
                  jdbc_port="25650"
                  jdbc_user="mvdemo"
                  jdbc_password="LfCDQ6NH59nuV7zbeY5QY06sqN7XhiUQ"
                  jdbc_mode="thin"
                  number_of_mappers="3"
                  allow_jdbc_theme_based_foi="true"
                  plsql_package="web_user_info"
                  web_user_type="MON_USER"
  />

web_user_type属性に使用できる値は次のとおりです。

  • J2EE_USER: Java EEセッションから認証済ユーザー名を取得するようマップ・ビジュアライゼーション・コンポーネントに指示します

  • OSSO_USER: OSSOセッションから認証済ユーザー名を取得するようマップ・ビジュアライゼーション・コンポーネントに指示します。

  • <cookie-name>: 指定した名前のCookieから認証済ユーザー名を取得するようマップ・ビジュアライゼーション・コンポーネントに指示します。Cookie名は大/小文字が区別されません。

web_user_type属性が指定されていない場合、マップ・ビジュアライゼーション・コンポーネントではユーザー名をまずJava EEセッションで検索し、見つからない場合はOSSOセッションで検索します(存在する場合)。

1.7.3 ユーザー認証のオプション

ユーザーをいつ、どこで、どのように認証するかは、アプリケーションの要件やインストールのセットアップに応じて異なります。たとえば、次のようなオプションがあります。

  • マップ・ビジュアライゼーション・コンポーネントをエンタープライズ・ポータル・サイトの一部としてデプロイし、エンド・ユーザーがマップ・ビジュアライゼーション・コンポーネントを利用してマッピング機能を実行する前に、最初に必ずこのポータルにログインするようにします。

  • マップ・ビジュアライゼーション・コンポーネントを別のシステムにデプロイし、中央のOracle SSOサーバーでユーザーを認証するようにします。

マップ・ビジュアライゼーション・コンポーネントに到達するHTTPリクエストに、認証済ユーザー情報が含まれているかぎり、マップ・ビジュアライゼーション・コンポーネントはリクエストをデータベースに渡すことができ、セキュアなデータ・アクセス手法が期待どおりに機能します。