概要
TDVではデフォルトでログインユーザー名などのシステムプロパティを取得できるプロシージャが存在します。
本記事では、そのプロシージャを利用した行列レベルセキュリティの設定方法について説明します。
※前提条件として、行列レベルセキュリティを適用するリソースにGetPropertyで取得できる値が含まれている必要があります。
例として、TDVのユーザー名が含まれたテーブルに対して、クエリを実行するユーザー名が含まれる行だけを返す行レベルセキュリティを適用します。
・使用するテーブル
・TDVのユーザー
・ユーザーtest2でのリクエスト結果
設定手順
1. 任意のフォルダ上で右クリックし、新規 > 新しいSQLスクリプトを選択します。
2. SQLスクリプトに以下の内容を入力します(クエリ内のコメントを参照の上、パラメータを変更してください)。
PROCEDURE row_policy (IN alias VARCHAR ,OUT result VARCHAR)
BEGIN
DECLARE temp VARCHAR;
DECLARE test BOOLEAN;
DECLARE user_name VARCHAR(4096);
SET result = '';
--ルールを適用するグループやユーザー応じて書き換えてください
--CALL /lib/users/TestUserIdentity(GROUPまたはUSER,セキュリティを適用するユーザーまたはグループ名,グループまたはユーザーが所属するドメイン,test);
CALL /lib/users/TestUserIdentity('GROUP','get_user_test','composite',test);
--システムプロパティの値を取得するプロシージャを呼び出しています。
--https://docs.tibco.com/pub/tdv/8.5.2/doc/html/ja-JP/StudioHelp/index.html#page/StudioHelp%2FCh_4_ProceduresList_33.StudioHelp.html
CALL getProperty('CURRENT_USER_NAME', user_name);
IF(test) THEN
--適用したいルールに応じて書き換えてください。
--以下のクエリでは「userカラムの値が、user_name(リクエストしているユーザー名)に一致する値を返す」というルールになっています。
SET temp = '(' || alias || '."user" =''' || user_name||''')';
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
3. SQLスクリプトを保存します。
4. 行列ベースのセキュリティ設定手順の「行ベースのセキュリティ」の項目を従い、行レベルセキュリティの設定を行います。
「ルールの追加」の項目では以下のように設定します。
項目 | 内容 |
---|---|
ユーザ/グループ | このルールを付与する単位(ユーザまたはグループ) |
ドメイン | このルールを付与するユーザまたはグループの所属するドメイン |
名前 | このルールを付与するユーザまたはグループの名前 |
ルール |
プロシージャを選択 |
データ/パス |
作成したSQLスクリプトまでのパス |