建立政策

適用於:標記為 是 Databricks SQL 標記為 是 Databricks Runtime 16.4 和更高版本 標記為 是 Unity Catalog 仅适用

建立一份有擔保資產的命名保單。 政策可以是列篩選器、欄位遮罩或 ABAC GRANT 政策。 列篩選與欄位遮罩可套用於目錄、結構或資料表,並可在 Databricks 執行環境 16.4 及以上版本中使用。 ABAC GRANT 政策套用於目錄或結構,並動態賦予其目標擔保資產的權限。 保單名稱的範圍是針對該保單所定義的可擔保資產。

要執行此聲明,您必須擁有 MANAGE 該目標的權利或其所有者。

使用 SQL 建立、修改或刪除 ABAC GRANT 政策,需要 Databricks 執行時 18 LTS 或以上版本。 在 SQL 倉庫中,支援取決於倉庫的發佈管道。 請參見 計算需求

注意

Databricks Runtime 18 比 Databricks Runtime 18.0、18.1 和 18.2 更新。 原本會以後期編號版本推出的功能,現在改為以 Databricks Runtime 18 的更新形式提供。 詳情請參見 關於統一發布說明

語法

CREATE [ OR REPLACE ] POLICY policy_name
ON { CATALOG catalog_name | SCHEMA schema_name | TABLE table_name }
[ COMMENT description ]
{ row_filter_body | column_mask_body | grant_policy_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 [, ...] ) ]

grant_policy_body
  TO principal [, ...]
  [ EXCEPT principal [, ...] ]
  GRANT privilege [, ...]
  FOR grant_target_type
  [ WHEN condition ]

列過濾器與欄位遮罩政策可以在目錄、結構或資料表上定義。 GRANT 政策可以僅在目錄或結構中定義。

參數

  • policy_name

    原則的名稱。 名稱的範圍是針對該保單所定義的可保障資產。 如果已有同名政策且 OR REPLACE 未指定,Azure Databricks 會 POLICY_ALREADY_EXISTS

  • catalog_name

    該政策所依據的目錄名稱。 如果政策不支援安全型態,Azure Databricks 會提高 POLICY_ON_SECURABLE_TYPE_NOT_SUPPORTED

  • schema_name

    定義該政策的結構名稱。

  • table_name

    該保單所定義的表格名稱。

  • 描述

    政策的可選字串註解。

  • function_name

    用於列過濾器或欄遮罩的 UDF 名稱。

  • privilege

    grant_policy_body中,對每一個符合保單的擔保資產授予特權。 有效的權限取決於 grant_target_type。 參見 支援的可安全類型與權限

  • grant_target_type

    grant_policy_body中,授予權利所適用的可擔保類型。 使用複數形式:MODELSMODEL SERVICESMODEL PROVIDER SERVICESMCP SERVICESAGENT SERVICES。 下划線的形式,例如 MODEL_SERVICES,也被接受。 單數形式不被接受。

  • principal

    使用者、群組或服務主體名稱。 多個主體可以在 後 TO列出。 後 EXCEPT 面列出的主體不包含在保單之外。

  • 狀況

    WHEN 是一個布林運算式,根據可保護物件的標籤、查詢使用者的身份屬性及/或請求的上下文,判斷該政策是否適用。

    MATCH COLUMNS 是一個根據標籤來匹配欄位的布林運算式(例如, has_tag('pii'))。

    條件由控制平面評估。 以下功能在條件下支援:

    • 標籤函數( 和has_tag()has_tag_value()): 在 和 MATCH COLUMNS中都支援WHEN。 在 中使用 WHEN時,它們會檢查直接放在表格上的標籤,或是從父目錄或結構繼承的標籤。 在 中 MATCH COLUMNS使用時,它們只檢查直接設定在欄位上的標籤。 舊的 camelCase 形式(hasTaghasTagValue)仍可向下相容。
    • 身份屬性函式( 和has_identity_attribute_value()has_identity_attribute_tag_match()):在WHEN欄位遮罩政策的條款中得到支援,該功能會評估執行查詢的使用者的身份屬性。 這些問題在政策DENYMATCH COLUMNSGRANT 請參閱 「根據查詢使用者的屬性遮罩欄位」。
    • 上下文屬性函式has_context_attribute()has_context_attribute_value()和):在 WHEN 列過濾器與欄位遮罩政策的子句中得到支援,這些函式會評估請求的上下文,例如呼叫應用程式。 它們在 中不被支援 MATCH COLUMNS。 請參見「 限制代表使用者行動的外部代理存取」。

    如果條件無效,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);

以下範例建立一個 ABAC GRANT 政策,對每個 Anthropic 建立的模型服務都給予EXECUTE授權:

> CREATE POLICY grant_anthropic_model_services
    ON SCHEMA system.ai
    COMMENT 'Grant EXECUTE on Anthropic model services'
    TO data_scientists
    EXCEPT contractors
    GRANT EXECUTE FOR MODEL SERVICES
    WHEN has_tag_value('ai.model_creator', 'anthropic');