免責事項: ブログで表現されているすべての見解や意見は 著者のみ のものであり、著者の雇用主や他のグループ、個人の意見とは必ずしも一致しません。この記事は いかなる クラウド/データ管理プラットフォームの宣伝ではありません。すべての画像とコードスニペットは、Azure/Databricksのウェブサイトで公開されています。
この記事では、Unity Catalogスキーマレベルでの権限管理を自動化するスクリプトを提供します。
Unity Catalogスキーマレベルの権限
Unity Catalogの階層的権限モデルにより、ユーザーは階層内の任意のレベルで権限を適用でき、子オブジェクトは自動的に同じ権限を継承します。したがって、スキーマレベルで権限が適用されると、そのスキーマ内のすべてのテーブル、ビュー、ボリューム、関数に自動的に適用されます。
Unity Catalog(Databricks)では、スキーマレベルでの権限は、特定のスキーマ内の一連のテーブルとビューへのアクセスを制御したい場合に適用されます。スキーマレベルの権限は、通常、以下のシナリオで適用されます:
- オブジェクトのグループへのアクセスを付与する:複数のテーブルやビューの権限をまとめて管理したい場合、各テーブルやビューごとに個別に権限を適用するのではなく、スキーマレベルで権限を適用する方が効率的です。これにより、そのスキーマ内のすべてのオブジェクトへのアクセスを同時に制御できます。
- 組織の制御: 組織内の異なるチームや部門が特定のデータセットにアクセスする必要がある場合、それらは別々のスキーマの下に格納されています。スキーマレベルのアクセス許可を適用すると、そのスキーマ内のチームに関連するすべてのオブジェクトへのアクセスを許可または制限できます。
- 一貫した権限管理: スキーマに頻繁に新しいオブジェクト(テーブル/ビュー)が追加される環境では、スキーマレベルでの権限設定により、新しいオブジェクトが自動的に権限を継承し、手動での権限更新の必要性が軽減されます。
- データセキュリティの維持: 特定のデータセットカテゴリ(例: 財務データ、人事データ)に対してアクセス制御を強制したい場合、そのデータが論理的にスキーマの下に整理されている場合には、スキーマレベルで権限を設定することで、データセキュリティを維持しながら管理を簡素化できます。
自動化スクリプト
前提条件
- Unity Catalog が既に設定されています。
- 主体は Databricks ワークスペースに関連付けられています。
- 権限スクリプトを実行するユーザーには、スキーマとカタログに適切な権限があります。
ステップ1: ノートブックを作成し、変数を宣言する
Databricks ワークスペースにノートブックを作成します。ワークスペースでノートブックを作成するには、サイドバーの “+” をクリックし、New を選択して、Notebook を選択します。
以下のコードスニペットをノートブックセルにコピーして貼り付け、セルを実行します。
catalog = 'main' # Specify your catalog name
schema = 'default' # Specify your schema name
principals_arr = '' # Specify the Comma(,) seperated values for principals in the blank text section (e.g. groups, username)
principals = principals_arr.split(',')
privileges_arr = 'SELECT,APPLY TAG' # Specify the Comma(,) seperated values for priviledges in the blank text section (e.g. SELECT,APPLY TAG)
privileges = privileges_arr.split(',')
ステップ2:カタログとスキーマを設定します。
以下のコードブロックをコピーして貼り付け、新しいセルまたは既存のセルで実行してください。
query = f"USE CATALOG `{catalog}`" #Sets the Catalog
spark.sql(query)
ステップ3:プリンシパルと権限をループ処理し、カタログとスキーマにグラントを適用します。
以下のコードブロックをコピーして貼り付け、新しいセルまたは既存のセルで実行して、権限を適用してください。
for principal in principals:
query = f"GRANT USE_CATALOG ON CATALOG `{catalog}` TO `{principal}`" # Apply use catalog permission at Catalog level
spark.sql(query)
query = f"USE SCHEMA `{schema}`" # Sets the schema
spark.sql(query)
query = f"GRANT USE_SCHEMA ON SCHEMA `{schema}` TO `{principal}`" # Apply use schema permission at Schema level
spark.sql(query)
for privilege in privileges:
query = f"GRANT `{privilege}` ON SCHEMA `{schema}` TO `{principal}`" # Use schema permission at Schema level
spark.sql(query)
検証
権限を検証するには、Databricks UI を開いて カタログ に移動します。カタログがデータセクションに表示されたら、カタログをクリックし、権限を適用したスキーマを選択し、権限 タブに移動します。ここで、スキーマに適用されたすべての権限を確認できます。
また、検証の一環として、ノートブックで以下のSQLスクリプトを実行して、スキーマのすべての権限を表示することもできます。
SHOW GRANTS ON SCHEMA my_schema;
結論
Databricks Unity Catalogでスキーマレベルで権限管理を自動化することは、カタログ内のオブジェクトグループ(例:テーブル、ビュー、関数、ボリューム)に対する一貫性のある効率的なアクセス制御を確保するのに役立ちます。提供されたコードは、スキーマレベルの権限を割り当てる実用的な方法を示しており、ユーザーやグループなどのプリンシパル全体に一貫した権限を適用することで、テーブルやビューをスキーマ内にグループ化し、スキーマ全体に一貫した権限を適用することで、管理タスクと手動エラーの可能性を減らすアプローチです。
Source:
https://dzone.com/articles/automate-databricks-unity-catalog-permissions-at-schema-level