データベースの行セキュリティの適用

データベース テーブルに対する行レベルのセキュリティは、次の 2 つの方法で実現できます。

  • 名前付きビューの MI_User または MI_Roles 関数を使用して、ユーザが確認できる行をフィルタリングで除外します。
  • SQL の前処理機能を使用して、ユーザ情報を、データベースのセッション コンテキストに渡します。その後、セッション コンテキストのユーザ情報を使用して、データベースに、行のフィルタリングが適用されます。

行レベルのセキュリティをデータベースに適用するには、クエリの対象となるテーブルに、各行にアクセスできる Spectrum ユーザの列が必要です。データベース クエリはその列を参照して、ある行の情報へのアクセス権がユーザまたは役割にあるかどうかを判断します。テーブルは Spectrum ユーザ名の列、または役割名の列、あるいはその両方の列を持つことになります。ユーザおよび役割は、Management Console で作成され、Spectrum Spatial™ Manager でデータベース (名前付きリソース) へのアクセス権が付与されます。

行セキュリティ用に Spectrum Spatial™ Manager で別のデータベース接続を作成することをお勧めします。Spectrum Spatial™ Manager でデータベースの行セキュリティをセットアップするには:

  1. データベースでビュー (データベース ビュー) を作成します。
  2. セッション コンテキストにユーザ情報を追加する PreSQL プロパティを用いて、そのデータベースへの接続を作成します。
  3. 名前付きテーブルをデータベース ビュー (ステップ 1 で作成したもの) に対して作成します。

データベース ビューの作成

データベースでビューを作成するには、データベース管理者であるかデータベース管理者の権限を持っていて、SELECT 句を使用してユーザまたは役割の列をフィルタリングする必要があります。以下に、ステートメントの例を示します。構文は、データベースのバージョンによって異なる場合があります。

MS SQL Server

SELECT CONVERT(varchar(100), SESSION_CONTEXT(N'loginuser')) as UserName

説明:

  • loginuser は、データベース接続を 作成するために (次のステップで) 使用されるデータベース トークンです。

Oracle

SELECT SYS_CONTEXT('userenv', 'client_identifier') AS UserName FROM dual

説明:

  • client_identifier は、データベース接続を作成するために (次のステップで) 使用されるデータベース トークンです。

PostGIS

select current_setting('spectrum.loginuser') as UserName

説明:

  • spectrum.loginuser は、データベース接続を作成するために (次のステップで) 使用されるデータベース トークンです。

以下は、Oracle データベースでデータベース ビューを作成する例です。

CREATE OR REPLACE VIEW PREPOST_VIEW_TEST AS
SELECT *
FROM "YOURDATABASE"."TESTTABLE"
WHERE OWNER =
(SELECT SYS_CONTEXT('userenv','client_identifier') FROM DUAL)
OR 
(SELECT SYS_CONTEXT('userenv','client_identifier') FROM DUAL) = 'admin'

説明:

  • OWNER はフィルタリングを行うための列です。この列には、それぞれの行の情報に対する権限を持つユーザ名または役割名が存在します。
  • YOURDATABASE はデータベース名です。
  • TESTTABLE は、フィルタリングの対象となるユーザ名または役割名の列があるテーブルです。

最初の SELECT 句は、ユーザまたは役割の列 (OWNER) のフィルタリングを行います。

2 番目の SELECT 句は、クエリが管理者 (admin) によって実行された場合にすべての行を返します。

データベースへの接続の作成

Spectrum Spatial™ Manager でデータベースへの接続を作成するには、管理者 (admin または spatial-admin) である必要があります。

まだ存在しない場合にデータベース接続を作成するには:

  1. Spectrum Spatial™ Manager で、データベースの名前付き接続を保存するフォルダに移動します。
  2. [作成] ボタンをクリックし、ドロップダウン メニューの [接続] を選択します。
  3. [接続を作成] 画面で次の操作を行います。
    1. [接続名] フィールドに、新しい接続の名前を入力します。
    2. 接続タイプとして [データベース] を選択します。
    3. [接続 URL] フィールドに、JDBC データベースに接続するための URL を入力します。
    4. 必要に応じて、接続用のデータベース ユーザ名とパスワードを入力します。空欄のままにした場合、ユーザ名とパスワードはデータベース リクエストおよびクエリの実行時に指定します。
    5. [プロパティ][キー] フィールドに「PreSQL」と入力します。
    6. [値] フィールドに、以下に示すデータベース用のステートメントを貼り付けます。
  4. [テスト] をクリックして、接続が正常に行われることを確認します。
  5. [保存] をクリックします。

データベース タイプごとの値フィールド エントリ

値フィールド ステートメントのトークンには 2 つのタイプがあります。ステートメントをデータベースに送信する前に、トークンは値で置き換えられます。トークンは、大文字と小文字が区別され、以下に示す形式になっている必要があります。

  • {{SPECTRUM_USER}} このトークンは Spectrum ログイン ユーザ名で置き換えられます。
  • {{SPECTRUM_ROLES}} このトークンは、ログイン ユーザが持つ Spectrum 役割リストで置き換えられます。

以下に、ステートメントの例を示します。構文は、データベースのバージョンによって異なる場合があります。

MS SQL Server

EXEC sys.sp_set_session_context @key=N'loginuser', @value='{{SPECTRUM_USER}}';

説明:

  • loginuser は、データベース ビューの作成時に設定されたデータベース トークンです。

Oracle

CALL DBMS_SESSION.set_identifier('{{SPECTRUM_USER}}');

PostGIS

select set_config('spectrum.loginuser', '{{SPECTRUM_USER}}', false);

説明:

  • spectrum.loginuser は、データベース ビューの作成時に設定されたデータベース トークンです。

データベース ビューへの名前付きテーブルの作成

作成されたビューは、Spectrum Spatial™ Manager の使用可能なデータベース ビューの一覧に表示されます。データベース ビューの作成方法については、「テーブルの作成」というタイトルのセクションを参照してください。