皆さん、こんにちは。今回はHANA CloudとSAP Analytics Cloud (以下、SAC) を使って、HANAのデータに行レベルでデータアクセス制限をかける方法についてご紹介します。
SACのユーザーとHANA Cloudのアクセスユーザーは別々に各システムで設定し、HANA Cloudでユーザーテーブルを作成しマッピング作業が必要なことに注意しましょう。
前提条件
- ブログの手順に沿ってSACとのSSOを設定したユーザーを作成
- データの入ったテーブル T1と、T1をSACから見るためのCalculation Viewとして、CV_T1_second を事前にHANA Cloudに作成。T1 は下記のようなテーブルです。IDは日本の都道府県コードが入っています。
手順
①BASでHANA Cloudプロジェクトを作成
プロジェクトの作成方法についてはこちらのブログを参考にしてください。
②ユーザーテーブルを作成
HANA Cloud Database Explorerを使って、ユーザーテーブル USERSを作成します。運用上の観点から、ユーザーテーブルはBASのプロジェクト作成時に自動生成されるHDIコンテナとは異なる HDIコンテナの中にUSERSテーブルを作成しすることにしました。BAS ProjectのHDIコンテナと異なる場所にあるテーブルのデータへアクセスする方法はこちらのチュートリアルを参考にしながら、ユーザーテーブルへアクセス権があるユーザーに対してのUser Provided Serviceを作成してください。
②プロシージャを作成
BASのテンプレートを使用してプロシージャ Test_row_HDI.hdbprocedure を作成し、下記のように変更します。3行目の権限がDEFINERになっているか確認してください。
PROCEDURE "Test_row_HDI"( OUT sql_expr NVARCHAR(50))
LANGUAGE SQLSCRIPT
SQL SECURITY DEFINER
--DEFAULT SCHEMA <default_schema_name>
READS SQL DATA AS
BEGIN
SELECT 'ID=' || "ROLE_ID" INTO sql_expr
FROM "USERS"
WHERE "DB_USER_ID" = SESSION_USER;
END;
④分析権限(Analytic Privilege)を作成
BASのテンプレートを使用してAnalytic Privilegeを作成します。今回は TEST_Dynamic_priという分析権限を作成しました。下記のイメージのように、分析権限を動的に設定し先ほどのプロシージャを選択します。
⑤ロール(Role)を作成
BASのテンプレートを使用してRoleを作成します。今回はROLE_Dynamicというロールを作成しました。作成したロールを開き、Analytics Privilegesで先ほど作成した分析権限を選択します。
次に、同じRoleのObject Privilegedで行レベルで制限をかけたいCalculation View(HANA view) : 今回は CV_T1_second を選択します
⑥Role付与
ブログの手順に沿ってSACとのSSOを設定したユーザーに、④で作成したRoleをGRANT文で付与します。(もしくは、HANA Cockpit 内 User ManagementアプリでRoleを付与します。)
DEMO_SAMLユーザーのロールをHANA Cockpitのユーザーマネジメントから確認すると下記のようにロールが付与されていることが確認できます。
以上で手順は終了です!
SAC上で、こちらのブログの手順で作成したSSOの接続を使用してモデルを作成し、そのモデルでストーリーを作成すると、アクセス権限があるデータのみが表示されます。
最後までお読みいただきありがとうございました。
Special thanks to Ikeguchi-san!