データベースの行セキュリティの適用
データベース テーブルに対する行レベルのセキュリティは、次の 2 つの方法で実現できます。
- 名前付きビューの MI_User または MI_Roles 関数を使用して、ユーザが確認できる行をフィルタリングで除外します。
- SQL の前処理機能を使用して、ユーザ情報を、データベースのセッション コンテキストに渡します。その後、セッション コンテキストのユーザ情報を使用して、データベースに、行のフィルタリングが適用されます。
行レベルのセキュリティをデータベースに適用するには、クエリの対象となるテーブルに、各行にアクセスできる Spectrum ユーザの列が必要です。データベース クエリはその列を参照して、ある行の情報へのアクセス権がユーザまたは役割にあるかどうかを判断します。テーブルは Spectrum ユーザ名の列、または役割名の列、あるいはその両方の列を持つことになります。ユーザおよび役割は、Management Console で作成され、Spectrum Spatial™ Manager でデータベース (名前付きリソース) へのアクセス権が付与されます。
行セキュリティ用に Spectrum Spatial™ Manager で別のデータベース接続を作成することをお勧めします。Spectrum Spatial™ Manager でデータベースの行セキュリティをセットアップするには:
- データベースでビュー (データベース ビュー) を作成します。
- セッション コンテキストにユーザ情報を追加する PreSQL プロパティを用いて、そのデータベースへの接続を作成します。
- 名前付きテーブルをデータベース ビュー (ステップ 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) である必要があります。
まだ存在しない場合にデータベース接続を作成するには:
- Spectrum Spatial™ Manager で、データベースの名前付き接続を保存するフォルダに移動します。
- [作成] ボタンをクリックし、ドロップダウン メニューの [接続] を選択します。
-
[接続を作成] 画面で次の操作を行います。
- [接続名] フィールドに、新しい接続の名前を入力します。
- 接続タイプとして [データベース] を選択します。
- [接続 URL] フィールドに、JDBC データベースに接続するための URL を入力します。
- 必要に応じて、接続用のデータベース ユーザ名とパスワードを入力します。空欄のままにした場合、ユーザ名とパスワードはデータベース リクエストおよびクエリの実行時に指定します。
- [プロパティ] の [キー] フィールドに「PreSQL」と入力します。
- [値] フィールドに、以下に示すデータベース用のステートメントを貼り付けます。
- [テスト] をクリックして、接続が正常に行われることを確認します。
- [保存] をクリックします。
データベース タイプごとの値フィールド エントリ
値フィールド ステートメントのトークンには 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 の使用可能なデータベース ビューの一覧に表示されます。データベース ビューの作成方法については、「テーブルの作成」というタイトルのセクションを参照してください。