適用於:
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:一個匹配可保障值(例如表層標籤條件)的布林運算式。 對於MATCH COLUMNS:一個匹配欄位的布林運算式(例如,has_tag('tag_name'))。 控制平面會根據可保護的元資料評估條件。 條件中唯一支援使用者的函數為has_tag()、has_tag_value()、has_column_tag()has_column_tag_value()和 。 較舊的 camelCase 形式(hasTag,hasTagValue,hasColumnTag,hasColumnTagValue) 仍能維持向下相容性。 如果條件無效,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);