Object Level Security(OLS)をつかってみた

# Power BI Premium環境でもアカウントによってアクセス権を制御したい
これまでRow Level Securityによって、レポートレベルであればアクセスしてくる人によって行レベルでフィルタをかけることはできたが、Power BI PremiumへPublishしてしまうとそのRepotyに紐づくすべてのTableへのRead権が付与されてしまうので、アクセス権制御については若干あきらめていた。

**Row Level Securityについて**

https://docs.microsoft.com/ja-jp/power-bi/admin/service-admin-rls
>Power BI で行レベル セキュリティ (RLS) を使用すると、特定のユーザーのデータ アクセスを制限できます。 フィルターでは行レベルでデータ アクセスが制限され、ロール内でフィルターを定義することができます。 Power BI サービスでは、ワークスペースのメンバーがそのワークスペース内のデータセットにアクセスすることができます。 RLS では、このデータ アクセスは制限されません。


# Object Level Securityがリリースされていた（知らなかった）

マイクロソフトの方に教えていただいた、個人的にサポートの手厚さはピカいちな気がします。ありがとうございます。


https://docs.microsoft.com/ja-jp/analysis-services/tabular-models/object-level-security?view=power-bi-premium-current

https://docs.microsoft.com/en-us/analysis-services/tabular-models/object-level-security?view=power-bi-premium-current

日本語と英語のページを置いておきます。

# 思った通りの挙動になるのか試しにやってみる
https://powerbi.microsoft.com/en-us/blog/object-level-security-ols-now-available-for-public-preview-in-power-bi-premium/

設定方法についてもブログを教えてもらいました。至れり尽くせり。

## 1. ロールの作成

**モデリング**から**ロールの管理**へ進み、今回は以下の二つのRoleを作ってみた

・Management：すべてのテーブルが見えるRole
・Facility Operator：Facilityのテーブルだけ見えるRole

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/627617/76e67a50-9644-114f-f9a8-f6b5d649896e.png)

## 2. 外部ツールのTablareditorを使用してRoleを作成する
### インストール（必要に応じて）
外部ツールなので、事前にインストールが必要です。こんな感じで出ていればOK。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/627617/82adb6ab-11cb-5ebf-2b9f-5f9ecad68020.png)

https://tabulareditor.github.io/

### 設定をする
さっき入れたRoleが反映されているのが確認できます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/627617/061b546d-2264-4dc7-6629-d828e8b7a8e4.png)

#### Securityカテゴリからテーブルごとに設定できる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/627617/7129defc-d8e0-681f-de53-4539441a7a87.png)

#### サンプルとしてFacility operatorは特定のTableしか見えないよう設定する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/627617/22e7d554-7906-fc78-d8b3-d48e529b8ea7.png)

## 3. 設定がうまくいっているか確認してみる
### Power BI Desktopでは、そのRoleでの見え方を確認できるので、Facility Operator権限を割り当てる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/627617/36ae0064-3cda-ee99-e312-b600649e199d.png)

### 何もアクセス制御がかかってない場合このように見える
これは二つのテーブルから名前の一覧を持ってきていて、
それぞれデータのソースが、fac_list（左）とnet_list（右）です
Facility operator権限で閲覧した時に、左側のテーブルだけ見えるようになっているのが正しい挙動になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/627617/5215fc5d-42dd-a23a-94bb-9eed47c9c776.png)

### 想定通りの動きをすることが確認できた
下のように、左側のテーブルだけが見えるようになりました。
問題がありますと出てくるのが若干いけてないですが、しかたないですね。
今自分がどのRoleで見ているのかも明示してくれるので、その辺も間違いようがありません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/627617/9bab1fe4-31e5-453e-c0b1-cce1c475b510.png)

## 4. Power BI Services上でアカウントをRoleへアサインする

### Roleにアカウントを割り当てる
Power BI DesktopからPower BI ServicesへPublishして、
一覧からDatasetのSecurityを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/627617/9bdd6657-e949-cf35-5585-9de55e1c6be4.png)

### Facility OperatorへRoleをアサインする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/627617/735700ba-c871-906e-7b94-4701096ba247.png)




## 5. Power BI Premium環境へPublishして挙動を確かめる
### Admin権限がなかったので、代理で実施してもらいました。
もとの記事にある通り、XMLAをRead Writeで有効化してもらいました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/627617/42c0455e-a88f-eadd-90fe-fc026ab3505a.png)

### 想定通りの動きであることが確認できた
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/627617/29cef7f2-4617-6233-ce8a-c63c9ed05a92.png)

## 6. まとめ

Power BI Premium上でも閲覧権限をテーブルレベルで操作できる機能は非常に大きいと思います。
グループと組み合わせることで、各Data setにSecurityの設定をいれるところも楽に管理できるのではと感じました。