TDVにて公開されたデータサービスに対して行列ベースのセキュリティを設定する手順について説明します。
行列ベースのセキュリティ とは?
| 行ベースのセキュリティ | 列ベースのセキュリティ | |
|---|---|---|
| 利用目的 | データを利用するグループ・ユーザによっては、閲覧可能なレコードを制限させたい場合に利用します。 | データを利用するグループ・ユーザによっては、特定カラム値の閲覧を制限させたい場合に利用します。 |
| 設定I/F | TDV Manager(ウェブブラウザ) | TDV Manager(ウェブブラウザ) |
| 設定内容 |
行ベースのセキュリティはポリシーという単位で定義されます。
|
列ベースのセキュリティはポリシーという単位で定義されます。
|
| 割り当て先 |
リソース(データソース、ビュー など) |
リソース内の列(カラム) |
検証環境
| 製品 | バージョン |
|---|---|
| TIBCO Data Virtualization | 8.5.1 |
本手順で行うこと
本手順では、例として既に公開済みのordersテーブルに対し、行列ベースのセキュリティポリシーを適用します。
このordersテーブルは、東京23区内のいくつかの区の情報を「区ID」「区名」として含み、個人情報に相当する顧客名等の情報も含みます。
ordersテーブルに対し、以下の図のように、「特定のグループに対して行列レベルでデータの閲覧を制限する」行・列ベースのセキュリティポリシーを定義して適用します。

行列ベースのセキュリティポリシーを適用した状態のordersテーブルのデータリネージュは以下のようになります。

図中のリソースツリー上のrbsフォルダに格納されているものが行ベースのセキュリティポリシーで、cbsフォルダに格納されているものが列ベースのセキュリティポリシーです。
参考)行列ベースのセキュリティポリシーの実体と設定方法
行列ベースのセキュリティポリシーの実体は以下のようなSQLスクリプトですが、TDVではこのようなSQLスクリプトを自分で記述することなく、TDV Managerにて提供される専用のGUIから設定することができます。
PROCEDURE "行ベースセキュリティ" (IN alias VARCHAR, IN resource VARCHAR(16384), OUT result VARCHAR(16384))
BEGIN
DECLARE temp VARCHAR;
DECLARE test BOOLEAN;
SET result = '';
CALL /lib/users/TestUserIdentity('GROUP','demo_minato','intad.tibcoms.com',test);
IF(test) THEN
SET temp = '(' || alias || '.区ID = 9)';
IF (result = '') THEN
SET result = temp;
ELSE
SET result = result || ' OR ' || temp;
END IF;
END IF;
IF ( result = '') THEN
SET result = 'FALSE';
END IF;
END
注意:行ベースのセキュリティポリシーは保存場所を指定できますが、列ベースのセキュリティポリシーは保存場所を指定できません。
行ベースのセキュリティ
行ベースのセキュリティポリシーを適用する手順について説明します。
ポリシー追加
TDV Managerにて、「セキュリティ」 > 「行レベルセキュリティ」をクリックします。

「行ベースセキュリティ」にて「ポリシーの追加」ボタンをクリックします。
このとき、行ベースのセキュリティが無効となっている場合は「有効化の変更」ボタンをクリックして有効化しておきます。

以下の項目を設定し、「ルールを追加」ボタンをクリックします。
| 項目 | 内容 |
|---|---|
| 名前 | この行ベースのセキュリティポリシーに付ける任意の名前 |
| フォルダ | この行ベースのセキュリティポリシーを保存するフォルダパス |
| 有効化 | この行ベースのセキュリティポリシーの有効/無効フラグ |
| 仕様 |
この行ベースのセキュリティポリシーの仕様
|

以下の項目を設定し、「OK」ボタンをクリックします。
| 項目 | 内容 |
|---|---|
| ユーザ/グループ | このルールを付与する単位(ユーザまたはグループ) |
| ドメイン | このルールを付与するユーザまたはグループの所属するドメイン |
| 名前 | このルールを付与するユーザまたはグループの名前 |
| ルール |
この行ベースのセキュリティ設定の仕様
|
| データ/パス |
「ルール」において、述語またはプロシージャを選択した場合に、データのフィルタリングに使用する文字列を指定します。 |
ルールが追加されたことを確認し、「デフォルトのルール」を設定後、「OK」ボタンをクリックします。
ルールの適用対象となっていないユーザ/グループにはこの「デフォルトのルール」が適用されます。

リソースへの割り当て
行ベースのセキュリティポリシーをリソースに割り当てます。
作成された行ベースのセキュリティポリシーを選択し、「割り当て」をクリックします。

「割り当ての編集」画面で「追加」ボタンをクリックします。

行ベースのセキュリティポリシーを割り当てたいリソースに✓を入れ、「OK」をクリックします。

行ベースのセキュリティポリシーの「割り当て数」にポリシーを割り当てたリソース数が表示されていることを確認します。

行ベースのセキュリティポリシーが割り当てられたリソースをTDV Studioのリソースツリーで確認すると、以下のように行ベースのセキュリティポリシーが割り当てられたことを示すアイコンがリソースのアイコンの右上に表示されます。

列ベースのセキュリティ
列ベースのセキュリティポリシーを適用する手順について説明します。
ポリシー追加
TDV Managerにて、「セキュリティ」 > 「列ベースのセキュリティ」をクリックします。

「列ベースのセキュリティ」の「Policy」タブにて「Add Policy」ボタンをクリックします。
このとき、列ベースのセキュリティが無効となっている場合は「有効化の変更」ボタンをクリックして有効化しておきます。

以下の項目を設定し、「Add Rule」ボタンをクリックします。
| 項目 | 内容 |
|---|---|
| Policy Name | この列ベースのセキュリティポリシーに付ける任意の名前 |
| Data Type | この列ベースのセキュリティポリシーを適用するカラムのデータ型 |
| Enabling |
この列ベースのセキュリティポリシーの有効/無効フラグ
|

以下の項目を設定し、「Apply」ボタンをクリックします。
また、このときにデフォルトのルールも変更することが可能です。
| 項目 | 内容 |
|---|---|
| Domain | このルールを付与する単位(ユーザまたはグループ) |
| Apply To | このルールを付与するユーザまたはグループの所属するドメイン |
| Name |
このルールを付与するユーザまたはグループの名前 |
| Rule Type |
このルールの種別
Partial String Maskは、Data TypeとしてStringを選択した場合のみ利用可能です。 |
| Value |
Rule Type として Statistic Value を指定した場合に入力する特定の値 |
| Custom Function |
Rule Type として Custom Function を指定した場合に、リストからカスタム関数を選択します。 |
| テキストフィールド (Expression) |
Rule Type として Expression を指定した場合に、式を入力します。 |

ルールが作成されたことを確認し、「SAVE」ボタンをクリックします。

「列ベースのセキュリティ」にて「Edit Assignment」タブをクリックします。

作成された列ベースのセキュリティポリシーを対象となるリソースのカラムに割り当てます。

列ベースのセキュリティポリシーの「Assignment Count」にポリシーを割り当てたカラム数が表示されていることを確認します。

列ベースのセキュリティポリシーが割り当てられたリソースをTDV Studioのリソースツリーで確認すると、以下のように列ベースのセキュリティポリシーが割り当てられたことを示すアイコンがリソースのアイコンの右上に表示されます。

動作確認
行列ベースのセキュリティポリシーが適用されたグループに所属するユーザでTDVに接続し、ordersテーブルからデータを取得します。
行ベースのセキュリティにより、レコードが区ID=9(区名 = 港)に制限され、列ベースのセキュリティにより、個人情報を含むカラム(姓 など)の値が****に置換されていることが確認できます。

参考)行列ベースセキュリティ設定の一覧表示
TDV Server内全体を通して、行列ベースのセキュリティポリシーが
- どのような内容か
- どのリソースにアサインされているか
といった情報は、TDVの内部データベース(リポジトリ)やビルトインのSOAP / REST API を活用してTDV Studio上でビューやプロシージャを作成することで一覧表示することができます。
以下にいくつかのビュー・プロシージャの例を示します。
ただし、本記事に添付されているcarファイルに含まれるビューやプロシージャはあくまでのサンプルである点はご留意ください。
行ベースセキュリティポリシーが付与されているリソース一覧 ビュー
ビュー名:rbsAssignedResources

列ベースセキュリティポリシーが付与されているリソース一覧 ビュー
ビュー名:cbsAssignedResources

行ベースセキュリティポリシー内に定義されているルールとその内容の一覧 ビュー
ビュー名:rbsFilterPolicyDetails

列ベースセキュリティポリシー内に定義されているルールとその内容の一覧 ビュー
ビュー名:cbsPolicyDetails

特定のリソースとその依存するリソースに対して付与されている行ベースセキュリティポリシーとその内容の一覧 を取得するためのプロシージャ
プロシージャ名:rbsFilterPolicyDetailsProc


特定のリソースとその依存するリソースに対して付与されている行ベースセキュリティポリシーとその内容の一覧 を取得するためのプロシージャ
プロシージャ名:cbsPolicyDetailsProc


インポート手順
1. TDV Studio のリソースツリーにて、「shared(共有)」を右クリックし、「インポート...」をクリックします。
2. 添付のアーカイブファイル(security_utils.car)を指定し、暗号化パスワードを入力後、「インポート」をクリックします。
security_utils.carは TDV 8.5.2 環境で作成したものです。
※

暗号化パスワードはtibco123です。
3. 「/shared/security_utils/ physical/metadata/tdv_repo」 を開き、TDVリポジトリ接続のためのパスワードをインポート先TDV環境のものに変更 します。

4. 「/shared/security_utils/physical/metadata/tdv_rest/cbs」を開き、TDV管理用REST API接続のためのパスワードをインポート先TDV環境のもの(adminユーザなどのもの)に変更します。

5. /shared/security_utils/application配下のビュー・プロシージャが実行できるか確認します。
ビュー名先頭がrbs:行ベースセキュリティ関連のビュー・プロシージャ
ビュー名先頭がcbs:列ベースセキュリティ関連のビュー・プロシージャ
BIツールなどからの利用
作成したビューをデータベースとして公開し、BIツールやSQLクライアントからクエリを実行しビジュアライズすることで現在の行列ベースセキュリティの設定状況を把握しやすくなります。
以下は、TDVで公開したビューをTIBCO社のBIツールであるSpotfireでビジュアライズした例です。
行ベースセキュリティポリシー

列ベースセキュリティポリシー

上記のダッシュボードを実現するdxpファイル(行列ベースセキュリティ設定.dxp)を添付しています。行列ベースセキュリティ設定.dxpは Spotfire 11.4.2 環境で作成されたものです。
