Technical Articles
SAP Data Warehouse Cloud: データアクセス制御
※ 今回のBlog 読者の対象者は、こちらのBlogを一通り、確認/経験された方になります。
今回はSAP Data Warehouse Cloud ( 以下、「DWC」) のデータへのアクセス制御について解説します。
DWCのデータ(テーブルやビューなど)へのアクセス制御、アクセス権限管理は、基本的にスペース単位でオブジェクト(テーブルやビュー)を管理して、そのオブジェクトに対してアクセス可能なユーザをスペースに追加して、アクセス管理を行います。
従来のデータベースの権限管理での「ロール」の考え方を、より直感的に「スペース」という単位で実装する形になります。
ただし、同じスペース内でも、データの内容によってユーザーにアクセス制御を行いたいケースがあります。
例えば、図のようにKABATA さんは全地域の売上ではなく、アジア地域の売上データのみアクセスさせたいケースなどです。
このような運用を実現するために、「権限テーブル」を用意することによって、ログインしたユーザー毎に参照できるデータ定義し、きめ細やかなアクセス制御を行うことが可能です。
一般的には、特定のデータを検索条件として指定した「ビュー」を作成する方法もありますが、ユーザーやグループ毎にビューを作成しなければならず、ビューの管理が煩雑になるケースがあります。
例えば、急な組織変更があった場合には、その都度、ビューを再作成しなければならず、レポート画面も変更されたビュー毎に修正や再作成、追加の作成が求められるケースがあります。
そこで、この「権限テーブル」を利用して、ユーザーとアクセス対象のデータ範囲を指定する方式も併せて検討します。
この権限テーブルのデータをメンテナンスすることにより、スキーマ構造やレポート、アプリケーションを変更する必要がないので、運用上もメンテナンス作業負荷が軽減する可能性があります。
※ ロールやビューの管理でもメリットはたくさんあります。
アクセス制御の設定の流れは下記の通りです。
1. 権限テーブルを作成
2. アクセス制御定義の作成 (権限テーブルの結合キー列の指定)
3. 権限テーブルとアクセス対象のテーブルの関連付け
一般的に、アクセス制御を実装する際には、その設定はトランザクションテーブルに対してではなく、マスターテーブルのデータに対して実装したほうが効率的で、アクセス管理も容易になります。
今回の例では顧客マスターディメンションビュー、製品マスターディメンションビューに対して、「地域アクセス権限テーブル」、「製品ライン権限テーブル」をそれぞれ関連付けます。
※ こちらのBlogで作成したディメンションビューを利用します。
権限テーブルの作成
まず、こちらのサイトからCSVファイルをダウンロードしてください。下記の2つのファイルです。
・P_Region.csv : 地域アクセス権限テーブル用のデータ
・P_ProductLine.csv : 製品ライン権限テーブル用のデータ
ダウンロードしたCSVファイルを利用してデータを修正します。特定の列の値に対して、ご自身のメールアドレスに修正してください。
※ 各IDの意味が分かり易いように、地域名、製品ライン名もテーブルに含めています。
下記の例では、xxxxxxxx-kabata@sap.com ユーザーが「地域 ID: 5 (Asia PAC)」 と 「製品ラインID : 1(Sports)」 のみアクセス可能な権限データになっています。
それでは、CSVデータを元にデータをアップロードして下記の2つの権限テーブルを作成します。
【地域アクセス権限テーブル】
【製品ライン権限テーブル】
アクセス制御定義の作成
続いて、アクセス権限テーブルの特定の列によって、マスターテーブルのデータのアクセスを制御するための定義を作成します。
まずは「地域アクセス制御」の定義を行います。
左メニューの「データアクセス制御」を選択し、「新規データアクセス制御」をクリックし、任意のビジネス名、技術名をつけます。
「データエンティティー」として、「地域アクセス権限テーブル」を指定します。
顧客マスターテーブルと関連付ける列となるREGIONID(地域ID)列にチェックします。
※ 図は簡略化しています
ID列には、「LoingUser」列を指定します。名前の通り、DWCにログインするユーザー情報(今回はメールアドレス) が格納されている列です。
設定が終わったら、「保存」ボタン、「デプロイ」ボタンの順番にクリックし、設定を有効化します。
同様の手順で「製品ライン アクセス制御」の定義を行います。
「新規データアクセス制御」を再度、クリックし、任意のビジネス名、技術名をつけます。
「データエンティティー」として、「製品ライン権限テーブル」を指定します。
製品マスターテーブルと関連付ける列はLINEID(製品ラインID) 列になりますのでチェックします。
ID列には、「LoingUser」列を指定し、設定が終わったら、「保存」ボタン、「デプロイ」ボタンの順番にクリックし、設定を有効化します。
権限テーブルとマスターテーブルを関連付け
再び、左メニューの「データビルダ」から こちらのBlogで作成した顧客マスターディメンションビューを選択し、設定画面から「データアクセス制御制限を追加」 の「+」ボタンをクリックします。
ここでは先ほど作成した「地域アクセス制御」の定義を選択します。
顧客マスターテーブルとこのアクセス制御の情報を関連付けます。
製品顧客マスターテーブルのREGIONID列からアクセス制御情報のREGIONID列に対してDrag & Dropします。
「ビュー」ボタンをクリックしてデータの内容を確認します。
REGIONID列の値が権限テーブルに設定されている値の「5 (Asia PAC)」のデータしか参照できないことが確認できると思います。
確認後、「保存」ボタン、「デプロイ」ボタンの順番にクリックし、ディメンションビューを有効化します。
同様の手順で製品マスターディメンションビューの設定を行います。
製品マスターディメンションビューの設定画面で「データアクセス制御制限を追加」の「+」ボタンをクリックし、「製品ラインアクセス制御」の定義を選択します。
製品マスターテーブルのLINEID列からアクセス制御情報のLINEID列に対してDrag & Dropして関連付けます。
「ビュー」ボタンをクリックして、データのプレビューを見ると、指定した製品ラインの「1 (Sports) 」のデータしか参照できないことが確認できると思います。
確認後、「保存」ボタン、「デプロイ」ボタンの順番にクリックし、ディメンションビューを有効化します。
ここで注意点が一つあります。
今回、ディメンションビューを変更したので、このディメンションビューを利用している関連ビューを再デプロイする必要があります。
このディメンションビューに関連している「受注明細(分析用)ビュー」のリンクが表示されているので、リンクをクリックし、「受注明細(分析用)ビュー」の設定画面で「デプロイ」ボタンをクリックして有効化します。
アクセス制御の確認
それではSAP Analytics Cloud のストーリーで前回作成したグラフを使ってデータを参照してみましょう。
アクセスすると地域はAsia PAC (アジアパシフィック) の情報、そして製品ラインは、Sports関連製品の売上データしか参照できないことが確認できたかと思います。
最後に & 運用上の注意点
従来のDBのアクセス権限の運用では、ロールの定義変更やビューの再作成など、運用負荷が高かったと思いますが、この権限テーブルの運用は比較的容易かと思います。
ただし、沢山の権限テーブルを作成すると内部的にテーブル結合の処理数が増えるので、性能面での懸念があるので注意深く検討、実装してください。
昨今、データガバナンスの気運も高まっていますが、「会社の情報は、極力、社員全員で共有する」という考えも大事なので、是非、「共有」にも重点を置いていただけたらと思います。
(「隣の営業部の売上情報が見えてもいいんじゃない ?」くらいの発想で。ただし、全社の売上データがリアルタイムに全社員に共有されると自社株が売れなくなるので要注意ですが・・・)
また、アクセス制御については、アプリケーションレイヤーやツール内で権限を管理するケースもあると思います。このアクセス制御については、どのレイヤーで実装するのが良いのか、未だに正解はないように思えます。
ただ、( データベース好きな私の個人的な観点では) やはり、色々なツール、アプリケーションからアクセスされるデータは、データベースレイヤーでアクセス制御されるべきと考えています。
( 全てのデータがアプリケーションでマネージされる場合はその限りではありません)
DWCは色々なシステムのデータを仮想アクセスすることも可能です。各システムのデータのアクセス権限も含めてDWC上で設定し、最低限のデータガバナンスを維持しながら、DWCが 社員全員が利用するデータ活用基盤の一助になればと考えています。
ありがとうございました !!