這很重要
這項功能目前處於 公開預覽版。
本教學課程介紹如何在 Unity 目錄中設定數據列篩選和數據行遮罩屬性型存取控制 (ABAC) 原則。
在此範例中,美國分析團隊不應能夠存取歐盟客戶記錄或 SSN。 不過,他們應該能夠存取相同資料表中的其他客戶和客戶資料。 本教學課程包含下列步驟:
- 建立受控管的標籤
- 建立 Unity 目錄目錄、架構和數據表
- 將控管標籤套用至欄位
- 建立UDF以隱藏歐盟成員的數據
- 建立數據列篩選原則
- 建立UDF以隱藏 SSN
- 建立欄位遮罩原則
- 使用政策選取您的表格
如需設定 ABAC 的示範,請參閱使用 Unity 目錄探索 Attribute-Based 存取控制 (ABAC)。
計算需求
- 您必須在 Databricks Runtime 16.4 或更新版本上使用計算。
- 無伺服器運算一律可與 ABAC 搭配使用。
執行較舊執行階段的運算無法存取受 ABAC 保護的資料表。 作為暫時的因應措施,您可以將 ABAC 設定為僅套用至特定群組。 將您要限制的使用者新增至該群組。 不在群組中的使用者仍然可以存取資料表。
步驟 1:建立受控管的標籤
若要建立受控管標籤,您必須在帳戶層級擁有受管控標籤 CREATE 許可。 帳戶和工作區管理員預設擁有創建權限。
在您的 Azure Databricks 工作區中,按兩下
目錄。
按下 「受控標籤」 > 按鈕。
按一下 建立受控管標籤。
輸入標籤鍵值
pii。輸入受控管標籤的說明。
輸入標籤的允許值:
ssn和address。 只有這些值可以指派給這個標籤鍵。
點擊 建立。
警告
標籤資料儲存為純文字,並可全域複製。 請勿使用可能危及資源安全性的標籤名稱、值或描述元。 例如,請勿使用包含個人或敏感資訊的標籤名稱、值或描述子。
步驟 2:建立客戶資料表
若要遵循這些步驟,您必須擁有 CREATE CATALOG Unity 目錄中繼存放區的許可權。 您也可以在您擁有 CREATE TABLE 許可權的架構中建立資料表。
- 在提要欄中,按一下 +新增>筆記本。
- 選取 [
SQL] 作為筆記本語言。 - 按兩下 [ 連線 ],並將筆記本附加至計算資源。
- 將下列命令新增至筆記本並加以執行:
-- Create catalog (if not already exists)
CREATE CATALOG IF NOT EXISTS abac;
USE CATALOG abac;
-- Create schema
CREATE SCHEMA IF NOT EXISTS customers;
USE SCHEMA customers;
-- Create table
CREATE TABLE IF NOT EXISTS profiles (
First_Name STRING,
Last_Name STRING,
Phone_Number STRING,
Address STRING,
SSN STRING
)
USING DELTA;
-- Insert data
INSERT INTO profiles (First_Name, Last_Name, Phone_Number, Address, SSN)
VALUES
('John', 'Doe', '123-456-7890', '123 Main St, NY', '123-45-6789'),
('Jane', 'Smith', '234-567-8901', '456 Oak St, CA', '234-56-7890'),
('Alice', 'Johnson', '345-678-9012', '789 Pine St, TX', '345-67-8901'),
('Bob', 'Brown', '456-789-0123', '321 Maple St, FL', '456-78-9012'),
('Charlie', 'Davis', '567-890-1234', '654 Cedar St, IL', '567-89-0123'),
('Emily', 'White', '678-901-2345', '987 Birch St, WA', '678-90-1234'),
('Frank', 'Miller', '789-012-3456', '741 Spruce St, WA', '789-01-2345'),
('Grace', 'Wilson', '890-123-4567', '852 Elm St, NV', '890-12-3456'),
('Hank', 'Moore', '901-234-5678', '963 Walnut St, CO', '901-23-4567'),
('Ivy', 'Taylor', '012-345-6789', '159 Aspen St, AZ', '012-34-5678'),
('Liam', 'Connor', '111-222-3333', '12 Abbey Street, Dublin, Ireland EU', '111-22-3333'),
('Sophie', 'Dubois', '222-333-4444', '45 Rue de Rivoli, Paris, France Europe', '222-33-4444'),
('Hans', 'Müller', '333-444-5555', '78 Berliner Str., Berlin, Germany E.U.', '333-44-5555'),
('Elena', 'Rossi', '444-555-6666', '23 Via Roma, Milan, Italy Europe', '444-55-6666'),
('Johan', 'Andersson', '555-666-7777', '56 Drottninggatan, Stockholm, Sweden EU', '555-66-7777');
步驟 3:將受控管的標籤新增至 PII 欄
- 將下列命令新增至筆記本並加以執行:
-- Add the governed tag to ssn column
ALTER TABLE abac.customers.profiles
ALTER COLUMN SSN
SET TAGS ('pii' = 'ssn');
-- Add governed tag to address column
ALTER TABLE abac.customers.profiles
ALTER COLUMN Address
SET TAGS ('pii' = 'address');
步驟 4:建立 UDF 以尋找歐盟地址
- 將下列命令新增至筆記本並加以執行:
-- Determine if an address is not in the EU
CREATE OR REPLACE FUNCTION is_not_eu_address(address STRING)
RETURNS BOOLEAN
RETURN (
SELECT CASE
WHEN LOWER(address) LIKE '%eu%'
OR LOWER(address) LIKE '%e.u.%'
OR LOWER(address) LIKE '%europe%'
THEN FALSE
ELSE TRUE
END
);
此 UDF 會檢查指定字串是否未提及歐洲或歐盟。 如果找到這些子字串中的任何一個,則會傳回 FALSE(這表示它是歐盟位址)。 如果找不到任何子字串,則會傳回TRUE(這表示它不是歐盟位址)。
步驟 5:建立資料列篩選原則
若要在物件上建立原則,您必須擁有 MANAGE 物件或物件的所有權。
若要將 UDF 新增至原則,您必須擁有 EXECUTE 並確保 UDF 位於 Unity Catalog 目錄中。
按兩下
目錄。
按一下您先前建立的
abac目錄。按兩下 [原則] 索引標籤。
按一下 新增原則。
一般來說:
- 對於名稱,輸入
hide_eu_customers。 - 針對 Description,輸入策略的描述。
- 針對套用至...,搜索並選擇政策适用的主體。 在此範例中,您可以使用群組 [所有帳戶使用者]。
- 將 Except for... 留空。
- 針對 Scope(範圍),選擇
abac目錄和所有結構描述。
- 對於名稱,輸入
針對 Purpose,選擇 隱藏表格列。
在 條件 中,按一下 選取現有。 然後,單擊
選擇功能。
在選取函式功能表中,先按一下
abac目錄,再按一下customers結構描述,然後按一下您先前建立的is_not_eu_address函式。按一下 ‹選取›。
或者,您可以展開 測試功能 並提供輸入,以測試遮罩功能。 例如,輸入
78 Berliner Str., Berlin, Germany E.U.並按一下 執行測試 會正確傳回FALSE (Hide row)。
在 函數參數中:
- 選擇 Map column to parameter 如果它有特定標籤。
- 搜尋
pii。 選取pii : address。
按一下 [ 建立政策]。
步驟 6:測試您的政策
- 傳回筆記本並執行下列命令:
SELECT DISTINCT * FROM abac.customers.profiles
只會傳回非歐盟居民數據列。
| 名字 | 姓氏 | 電話號碼 | 位址 | SSN |
|---|---|---|---|---|
| 恩典 | 威爾遜 | 890-123-4567 | 852 Elm St, NV | 890-12-3456 |
| 愛麗絲 | 約翰生 | 345-678-9012 | 789 松街,德州 | 345-67-8901 |
| 常春藤 | 泰勒 | 012-345-6789 | 159 阿斯彭街, AZ | 012-34-5678 |
| 弗蘭克 | 密勒 | 789-012-3456 | 741 Spruce St, WA | 789-01-2345 |
| 珍 | 史密斯 | 234-567-8901 | 456 橡樹街, CA | 234-56-7890 |
| John | 母鹿 | 123-456-7890 | 123 Main St, NY | 123-45-6789 |
| 查理 | 大衛斯 | 567-890-1234 | 654 雪松街,伊利諾伊州 | 567-89-0123 |
| 艾米麗 | 白色 | 678-901-2345 | 987 伯奇街, 西澳大利亞州 | 678-90-1234 |
| 漢克 | 摩爾 | 901-234-5678 | 963 核桃街,科羅拉多州 | 901-23-4567 |
| 鮑勃 | 棕色 | 456-789-0123 | 321 楓樹街,FL | 456-78-9012 |
您可以繼續建立欄位遮罩原則。
步驟 7:建立 UDF 以遮罩 SSN
- 將下列命令新增至筆記本並加以執行:
-- Masks any SSN input by returning a fully masked value
CREATE FUNCTION mask_SSN(ssn STRING)
RETURN '***-**-****' ;
此 UDF 會傳回完全遮罩的 SSN 字串串 ('***-**-****'),
步驟 8:建立資料行遮罩原則
若要在物件上建立原則,您必須擁有 MANAGE 物件或物件的所有權。
若要將 UDF 新增至原則,您必須擁有 EXECUTE 並確保 UDF 位於 Unity Catalog 目錄中。
按兩下
目錄。
按一下您先前建立的
abac目錄。按兩下 [原則] 索引標籤。
按一下 新增原則。
一般來說:
- 對於名稱,輸入
mask_ssn。 - 針對 Description,輸入策略的描述。
- 針對套用至...,搜索並選擇政策适用的主體。 在此範例中,您可以使用群組 [所有帳戶使用者]。
- 將 Except for... 留空。
- 針對 Scope(範圍),選擇
abac目錄和所有結構描述。
- 對於名稱,輸入
針對 Purpose(目的),選擇 遮蔽欄位資料。
在 條件下:
- 選擇 遮罩欄 如果它有特定標籤。 搜尋
pii並選擇pii : ssn。 - 按一下 選擇現有。 然後,單擊
選擇功能。
- 在選取函式功能表中,先按一下
abac目錄,再按一下customers結構描述,然後按一下您先前建立的mask_ssn函式。
- 選擇 遮罩欄 如果它有特定標籤。 搜尋
按一下 ‹選取›。
或者,您可以展開 測試功能 並提供輸入,以測試遮罩功能。 例如,輸入
901-234-5678並按一下 執行測試 會正確傳回***-**-****。
按一下 [ 建立政策]。
步驟 9:測試您的政策
- 傳回筆記本並執行下列命令:
SELECT * FROM abac.customers.profiles
現在社會安全號碼顯示為***-***-***。 只有非歐盟居民會被列出,因為同時啟用了資料列篩選遮罩。
| 名字 | 姓氏 | 電話號碼 | 位址 | SSN |
|---|---|---|---|---|
| 珍 | 史密斯 | 234-567-8901 | 456 橡樹街, CA | ***-**-**** |
| 愛麗絲 | 約翰生 | 345-678-9012 | 789 松街,德州 | ***-**-**** |
| 查理 | 大衛斯 | 567-890-1234 | 654 雪松街,伊利諾伊州 | ***-**-**** |
| 恩典 | 威爾遜 | 890-123-4567 | 852 Elm St, NV | ***-**-**** |
| 鮑勃 | 棕色 | 456-789-0123 | 321 楓樹街,FL | ***-**-**** |
| 漢克 | 摩爾 | 901-234-5678 | 963 核桃街,科羅拉多州 | ***-**-**** |
| 常春藤 | 泰勒 | 012-345-6789 | 159 阿斯彭街, AZ | ***-**-**** |
| 艾米麗 | 白色 | 678-901-2345 | 987 伯奇街, 西澳大利亞州 | ***-**-**** |
| 弗蘭克 | 密勒 | 789-012-3456 | 741 Spruce St, WA | ***-**-**** |
| John | 母鹿 | 123-456-7890 | 123 Main St, NY | ***-**-**** |