ダイナミック ビューの作成
Unity Catalog では、動的ビューを使用して、次のようなきめ細かなアクセス制御を構成できます。
- 列または行のレベルでのセキュリティ。
- データマスキング。
Unity Catalog には次の関数が導入されており、ビュー内の行、列、またはレコードにアクセスできるユーザーを動的に制限できます。
current_user()
: 現在のユーザーのEメール アドレスを返します。is_account_group_member()
: 現在のユーザーが特定のアカウント レベルのグループのメンバーである場合は、TRUE
を返します。 Unity Catalog データに対する動的ビューで使用することをお勧めします。is_member()
: 現在のユーザーが特定のワークスペース レベルのグループのメンバーである場合は、TRUE
を返します。 この機能は、既存の Hive metastoreとの互換性のために提供されています。 アカウント レベルのグループ メンバーシップを評価しないため、Unity Catalog データに対するビューと共に使用することは避けてください。
Databricks では、ビューで参照されているテーブルとビューを読み取る権限をユーザーに付与しないことをお勧めします。
次の例は、Unity Catalog で動的ビューを作成する方法を示しています。
始める前に
動的ビューを作成または読み取るための要件は、コンピュートの要件を除き、 標準ビューの要件と同じです。 次のいずれかのコンピュート リソースを使用する必要があります。
- A SQLウェアハウス.
- 標準アクセスモード(以前の共有アクセスモード)のコンピュート。
- Databricks Runtime 15.4 LTS 以上の専用アクセスモード(旧シングルユーザーアクセスモード)を搭載したコンピュート。
Databricks Runtime 15.3以下では、専用のコンピュートを使用してダイナミックビューを読み取ることはできません。
Databricks Runtime 15.4 LTS 以降で提供されているデータ フィルタリングを利用するには、 ワークスペースがサーバレス コンピュートに対して有効になっている ことも確認する必要があります。これは、動的ビューをサポートするデータ フィルタリング機能がサーバレス コンピュートで実行されるためです。そのため、専用のコンピュートを使用して動的ビューを読み取ると、サーバレス コンピュート リソースの料金が請求される場合があります。 「専用コンピュート (旧称 single user コンピュート) のきめ細かなアクセス制御」を参照してください。
列レベルの権限
ダイナミック ビューでは、特定のユーザーまたはグループがアクセスできる列を制限できます。 次の例では、 auditors
グループのメンバーのみが sales_raw
テーブルから Eメール アドレスにアクセスできます。 クエリ分析中、 Apache Spark は CASE
ステートメントをリテラル文字列 REDACTED
または Eメール address カラムの実際の内容に置き換えます。 他の列は通常どおり返されます。 この戦略は、クエリのパフォーマンスに悪影響を与えません。
-- Alias the field 'email' to itself (as 'email') to prevent the
-- permission logic from showing up directly in the column name results.
CREATE VIEW sales_redacted AS
SELECT
user_id,
CASE WHEN
is_account_group_member('auditors') THEN email
ELSE 'REDACTED'
END AS email,
country,
product,
total
FROM sales_raw
行レベルのアクセス許可
ダイナミック ビューでは、行レベルまたはフィールド レベルまでの権限を指定できます。 次の例では、 managers
グループのメンバーのみが、トランザクション金額が $1,000,000 を超えると表示できます。 他のユーザーに一致する結果は除外されます。
CREATE VIEW sales_redacted AS
SELECT
user_id,
country,
product,
total
FROM sales_raw
WHERE
CASE
WHEN is_account_group_member('managers') THEN TRUE
ELSE total <= 1000000
END;
データマスキング
Unity Catalog のビューは Spark SQLを使用するため、より複雑な SQL 式と正規表現を使用して高度なデータマスキングを実装できます。次の例では、すべてのユーザーがEメール ドメインを分析できますが、ユーザーの Eメール アドレス全体を表示できるのは auditors
グループのメンバーのみです。
-- The regexp_extract function takes an email address such as
-- user.x.lastname@example.com and extracts 'example', allowing
-- analysts to query the domain name.
CREATE VIEW sales_redacted AS
SELECT
user_id,
region,
CASE
WHEN is_account_group_member('auditors') THEN email
ELSE regexp_extract(email, '^.*@(.*)$', 1)
END
FROM sales_raw