適用於:
Databricks SQL
Databricks Runtime 16.4 和更高版本
Unity Catalog 仅适用
建立一份有擔保資產的命名保單。 政策可以是列過濾器或欄位遮罩,套用於目錄、結構或資料表。 保單名稱的範圍是針對該保單所定義的可擔保資產。
要執行此聲明,您必須擁有 MANAGE 該目標的權利或其所有者。
語法
CREATE [ OR REPLACE ] POLICY policy_name
ON { CATALOG catalog_name | SCHEMA schema_name | TABLE table_name }
[ COMMENT description ]
{ row_filter_body | column_mask_body }
row_filter_body
ROW FILTER function_name
TO principal [, ...]
[ EXCEPT principal [, ...] ]
FOR TABLES
[ WHEN condition ]
[ MATCH COLUMNS condition [ [ AS ] alias ] [, ...] ]
[ USING COLUMNS ( function_arg [, ...] ) ]
column_mask_body
COLUMN MASK function_name
TO principal [, ...]
[ EXCEPT principal [, ...] ]
FOR TABLES
[ WHEN condition ]
[ MATCH COLUMNS condition [ [ AS ] alias ] [, ...] ]
ON COLUMN alias
[ USING COLUMNS ( function_arg [, ...] ) ]
參數
-
原則的名稱。 名稱的範圍是針對該保單所定義的可保障資產。 如果已有同名政策且
OR REPLACE未指定,Azure Databricks 會 POLICY_ALREADY_EXISTS。 -
該政策所依據的目錄名稱。 如果政策不支援安全型態,Azure Databricks 會提高 POLICY_ON_SECURABLE_TYPE_NOT_SUPPORTED。
-
定義該政策的結構名稱。
-
該保單所定義的表格名稱。
描述
政策的可選字串註解。
-
用於列過濾器或欄遮罩的 UDF 名稱。
principal
使用者、群組或服務主體名稱。 多個主體可以在 後
TO列出。 後EXCEPT面列出的主體不包含在保單之外。-
對於
WHEN:一個布林運算式,根據標籤匹配可保護物(例如,has_tag('sensitivity'))。 對於MATCH COLUMNS:一個根據標籤匹配欄位的布林運算式(例如,has_tag('pii'))。 控制平面會根據可保護的元資料評估條件。 條件中唯一支援的面向使用者的功能是has_tag()和has_tag_value()。 當 在 中WHEN使用時,這些函式會檢查直接放在資料表上的標籤,或是從父目錄或結構繼承的標籤。 在 中MATCH COLUMNS使用時,它們只檢查直接設定在欄位上的標籤。 舊的 camelCase 形式(hasTag,hasTagValue)仍可向下相容。 如果條件無效,Azure Databricks 會 UC_INVALID_POLICY_CONDITION。 alias
在
MATCH COLUMNS中,為匹配欄位提供可選 的識別碼 。 別名可以在(列篩選)或USING COLUMNSON COLUMN欄遮罩中引用USING COLUMNS。function_arg
在
USING COLUMNS中,每個參數要麼是 常數表達式 ,要麼是來自MATCH COLUMNS的別名。 參數依序傳遞給政策函式。 如果選項與政策類型不符,Azure Databricks 會 UC_POLICY_TYPE_OPTIONS_MISMATCH。
Examples
以下範例建立欄位遮罩策略:
> CREATE FUNCTION ssn_to_last_nr (ssn STRING, nr INT) RETURNS STRING
RETURN right(ssn, nr);
> CREATE POLICY ssn_mask
ON CATALOG employees
COLUMN MASK ssn_to_last_nr
TO 'All Users' EXCEPT 'HR admins'
FOR TABLES
MATCH COLUMNS has_tag('ssn') AS ssn
ON COLUMN ssn
USING COLUMNS (4);
以下範例建立一個列過濾器策略:
> CREATE FUNCTION non_eu_region (geo_region STRING) RETURNS BOOLEAN
RETURN geo_region <> 'eu';
> CREATE POLICY hide_eu_customers
ON SCHEMA prod.customers
COMMENT 'Hide European customers from sensitive tables'
ROW FILTER non_eu_region
TO analysts
FOR TABLES
WHEN has_tag_value('sensitivity', 'high')
MATCH COLUMNS has_tag('geo_region') AS region
USING COLUMNS (region);