首記のご質問をいただき簡単にテストしてみました。
RCAC + WINDOWS11 ODBCのテスト概要
下記の環境でテストしました。
RCAC:行列レベルアクセス制御:Row and Column Access Control の略です。
手順① マスクしていない売掛残データ TKUZAN の確認
下記の左から3つ目のカラムがサンプルデータです。
QEOLに含まれるTOKMSPをコピー、リネームしたものです。
売掛残 TKUZAN カラムを列マスクでマスキングしてみます。
手順② RCACで列マスク
RCACの設定は全てSQLから実行します。
下記のサンプルSQLをACのスクリプト実行画面から流しました。(インフォセンター記載のサンプルを改修・簡略化したものです。)
**黄色部がユーザーID毎のアクセス制御(列マスク)をかけている行です。
CREATE MASK SQL文を実行するユーザーはSECOFRクラスであっても追加で以下例のようにQIBM_DB_SECADM機能の使用権限の付与が必要です。
CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(GOMA) USAGE(*ALLOWED)
コピペはコチラから。
CREATE MASK GOMALIB.MASK_TKUZAN ON GOMALIB.TOKMSPRCAC
FOR COLUMN TKUZAN RETURN
CASE
WHEN (VERIFY_GROUP_FOR_USER(SESSION_USER,'GOMA') = 1)
THEN TKUZAN
WHEN (VERIFY_GROUP_FOR_USER(SESSION_USER,'GOMA2') = 1)
THEN 999999999
ELSE 88888888
END
ENABLE;
COMMIT;
ALTER TABLE GOMALIB.TOKMSPRCAC
ACTIVATE COLUMN ACCESS CONTROL;
COMMIT;
SELECT * FROM GOMALIB.TOKMSPRCAC;
手順③ テスト結果
**一般ユーザー:GOMAでODBC接続した際は、2つ上の画像のようにTKUZANカラムの値がそのまま表示されます。
制限ユーザー:GOMA2でODBC接続した場合、下記のようにTKUZANカラムが99999999 と表示されます。
制限ユーザー:GOMA3でODBC接続した場合、下記のようにTKUZANカラムが88888888 と表示されます。
テスト結果から考察
・列MASKはそのカラム(フィールド)の属性に合わせて設定する必要があります。
- 今回、TKUZANは数値フィールドのため、Null , 文字列は指定できませんでした。
今回のサンプルではTKUZANという数値フィールドをSQL文で操作していますが、別なSQL文の指定(CASE式の別な書き方)で列MASKを設定すれば、結果的に数値フィールドもNULL値で表示できます。
続きの記事はこちらです
参考URL
インフォセンターIBM i 7.5 : IBM i SQL CREATE MASK ステートメント
https://www.ibm.com/docs/ja/i/7.5?topic=statements-create-mask