Databricksで利用できるデータストアにおけるデータへの権限付与機能（認可、アクセス制御）に関する検証

## 概要
Databricksで利用できるデータストアにおけるデータへの権限付与機能（認可、アクセス制御）を確認するために実施した、データ オブジェクトの特権と動的ビュー関数（行レベルセキュリティ、列レベルセキュリティ）に関する検証内容を共有します。

検証内容としては、下記の記事をベースにしております。

- [データストア（データ分析基盤）におけるデータへの権限付与（認可、アクセス制御）に関する指針の検討 - Qiita](https://qiita.com/manabian/items/ad7c5927817e7d76be0b)


詳細は下記のGithub pagesのページをご確認ください。

https://manabian-.github.io/databricks_tecks_for_qiita/#data_object_privileges_test/01_configure_data_object_privileges.html

コードを実行したい方は、下記のdbcファイルを取り込んでください。

```URL
https://github.com/manabian-/databricks_tecks_for_qiita/blob/main/tecks/data_object_privileges_test/data_object_privileges_test.dbc
```



## 検証方法
Databricks管理者権限を保持させたユーザーとデータ参照ユーザーの２つのユーザーを用意して、DDL実行等のメタデータのデプロイのノートブック（01_configure_data_object_privileges）を前者のユーザーで、データ参照の検証を後者のユーザーで実行。

- [01_configure_data_object_privileges](https://manabian-.github.io/databricks_tecks_for_qiita/#data_object_privileges_test/01_configure_data_object_privileges.html)
- [02_configure_data_object_privileges]()

下記を事前に実施する必要があります。

1. ワークスペースレベルでのテーブルアクセス制御を有効にすること
2. クラスター作成権限を拒否して、テーブルアクセス制御が有効なクラスターのみ利用するように設定すること
3. `SELECT ON ANY FILE`権限を拒否すること

## 検証結果
下記のデータストアにおけるデータへの権限付与が可能でした。DatabricksをデータレイクやDWHとして利用する際には、データへのセキュリティ要件を満たすことできそうです。

| 分類                             | 権限付与項目                                                 | 可否 | 実施方法                                        |
| -------------------------------- | ------------------------------------------------------------ | ---- | ----------------------------------------------- |
| データストアシステムへの権限付与 | SQL命令（DDL、DCL）相当に対する実行の権限付与                | 〇   | `CREATE`権限、あるいは、`OWNER`権限を付与する。 |
| データストアシステムへの権限付与 | オブジェクト（スキーマ）一覧の閲覧の権限付与                 | 〇   | `USAGE`権限と`SELECT`権限を付与する。           |
| データストアシステムへの権限付与 | データ参照の権限付与                                         | 〇   | `USAGE`権限と`SELECT`権限を付与する。           |
| データストアシステムへの権限付与 | データ挿入・更新・削除の権限付与                             | 〇   | `MODIFY`権限を付与する。                        |
| データへの権限付与               | ルールベースによる行レベルセキュリティ                       | 〇   | 動的ビュー関数を利用。                          |
| データへの権限付与               | データ権限（認可）テーブルを利用した行レベルセキュリティ     | 〇   | 動的ビュー関数を利用。                          |
| データへの権限付与               | 列への参照権限付与による列レベルセキュリティ                 | ×    |                                                 |
| データへの権限付与               | 動的データマスキングによる列レベルセキュリティ（ルールベース） | 〇   | 動的ビュー関数を利用。                          |
| データへの権限付与               | 動的データマスキングによる列レベルセキュリティ（データ権限（認可）テーブル） | 〇   | 動的ビュー関数を利用。                          |

下記の実行を許容する場合には、`USAGE`権限と`SELECT`権限だけでなく、`READ_METADATA`権限も許可してもよさそうです。

1. EXPLAIN
2. DESCRIBE TABLE
3. SHOW CREATE TABLE


## 参考リンク

-   [ワークスペースのテーブル アクセス制御を有効にする - Azure Databricks - Workspace | Microsoft Docs](https://docs.microsoft.com/ja-jp/azure/databricks/administration-guide/access-control/table-acl)
-   [テーブルのアクセス制御 - Azure Databricks - Workspace | Microsoft Docs](https://docs.microsoft.com/ja-jp/azure/databricks/security/access-control/table-acls/)
-   [クラスターのテーブルアクセス制御を有効にする-Azure Databricks | Microsoft Docs](https://docs.microsoft.com/ja-jp/azure/databricks/security/access-control/table-acls/table-acl)
-   [データオブジェクトの特権-Azure Databricks | Microsoft Docs](https://docs.microsoft.com/ja-jp/azure/databricks/security/access-control/table-acls/object-privileges)
-   [GRANT-Azure Databricks - Workspace | Microsoft Docs](https://docs.microsoft.com/ja-jp/azure/databricks/spark/latest/spark-sql/language-manual/security-grant)
-   [DENY-Azure Databricks | Microsoft Docs](https://docs.microsoft.com/ja-jp/azure/databricks/spark/latest/spark-sql/language-manual/security-deny)
-   [REVOKE - Azure Databricks | Microsoft Docs](https://docs.microsoft.com/ja-jp/azure/databricks/spark/latest/spark-sql/language-manual/security-revoke)
-   [SHOW GRANT - Workspace | Microsoft Docs](https://docs.microsoft.com/ja-jp/azure/databricks/spark/latest/spark-sql/language-manual/security-show-grant)