重要
此功能目前以公共预览版提供。
本教程介绍如何在 Unity 目录中配置行筛选器和列掩码基于属性的访问控制(ABAC)策略。
在此示例中,美国分析团队不应能够访问欧盟客户记录或 SSN。 但是,他们应该能够访问同一表中的其他客户和客户数据。 本教程包括以下步骤:
- 创建受管理标记
- 创建 Unity Catalog 目录、模式和表
- 将受治理的标记应用于列
- 创建 UDF 以隐藏欧盟成员的数据
- 创建行筛选器策略
- 创建用于隐藏 SSN 的 UDF
- 创建列掩码策略
- 按照策略选择您的表格
有关配置 ABAC 的演示,请参阅使用 Unity 目录发现 Attribute-Based 访问控制(ABAC)。
计算要求
- 必须在 Databricks Runtime 16.4 或更高版本上使用计算。
- 无服务器计算始终适用于 ABAC。
运行较旧运行时的计算无法访问 ABAC 保护的表。 作为临时解决方法,可以将 ABAC 配置为仅适用于特定组。 将要限制的用户添加到该组。 不在组中的用户仍然可以访问表。
步骤 1:创建受管理标记
若要创建受管理标记,必须在帐户级别具有受管理标记 CREATE 权限。 默认情况下,帐户和工作区管理员具有创建权限。
在 Azure Databricks 工作区中,单击
目录。
单击 “治理 ”按钮,然后单击“ 受治理标记”。
单击“ 创建受管理标记”。
输入标记键
pii。输入受治理标记的说明。
输入标记的允许值:
ssn和address。 只能将这些值分配给此标记键。
单击 “创建” 。
警告
标记数据以纯文本形式存储,可全局复制。 不要使用标记名称、值或描述符,这些标记名称或描述符可能会损害资源的安全性。 例如,不要使用包含个人或敏感信息的标记名称、值或描述符。
步骤 2:创建客户表
若要执行这些步骤,您必须在 Unity Catalog 元存储上拥有 CREATE CATALOG 权限。 您可以在您有权限的 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 添加到策略中,UDF 上必须具有EXECUTE,并且它必须在 Unity Catalog 中。
单击
目录。
单击您之前创建的
abac目录。单击“策略”选项卡。
单击“新建策略”。
一般情况下:
- 输入 作为“名称”
hide_eu_customers。 - 对于“描述”,请输入您的策略描述。
- 对于 “应用于...”,搜索并选择策略适用的主体。 在此示例中,可以使用组 所有帐户用户。
- 保持除外...为空。
- 对于 范围,请选择
abac目录和所有模式。
- 输入 作为“名称”
出于 目的,请选择“ 隐藏表行”。
在“条件”中,单击“选择现有”。 然后单击
选择函数。
在 “选择函数 ”菜单中,单击
abac目录、customers架构,然后单击is_not_eu_address之前创建的函数。单击“选择”。
(可选)可以通过扩展 测试函数 并提供输入来测试掩码函数。 例如,输入
78 Berliner Str., Berlin, Germany E.U.并单击 “运行测试 ”将正确返回FALSE (Hide row)。
在 函数参数中:
- 选择“将列映射到参数”如果它具有特定标记。
- 搜索
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 斯普鲁斯街, WA | 789-01-2345 |
| 珍 | 史密斯 | 234-567-8901 | 456 橡树街, CA | 234-56-7890 |
| John | 母鹿 | 123-456-7890 | 123 主街, 纽约 | 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 枫叶街 佛罗里达州 | 456-78-9012 |
可以继续创建列掩码策略。
步骤 7:创建用于屏蔽 SSN 的 UDF
- 将以下命令添加到笔记本并运行它:
-- Masks any SSN input by returning a fully masked value
CREATE FUNCTION mask_SSN(ssn STRING)
RETURN '***-**-****' ;
此 UDF 返回完全掩码的 SSN 字符串 ('***-**-****'),
步骤 8:创建列掩码策略
若要为对象创建策略,必须对该对象具有 MANAGE 或拥有所有权。
若要将 UDF 添加到策略中,UDF 上必须具有EXECUTE,并且它必须在 Unity Catalog 中。
单击
目录。
单击您之前创建的
abac目录。单击“策略”选项卡。
单击“新建策略”。
一般情况下:
- 输入 作为“名称”
mask_ssn。 - 对于“描述”,请输入您的策略描述。
- 对于 “应用于...”,搜索并选择策略适用的主体。 在此示例中,可以使用组 所有帐户用户。
- 保持除外...为空。
- 对于 范围,请选择
abac目录和所有模式。
- 输入 作为“名称”
出于 目的,请选择 “屏蔽列数据”。
条件:
-
选择“屏蔽”列如果它有特定的标签。 搜索
pii并选择pii : ssn。 - 单击“选择现有”。 然后单击
选择函数。
- 在 “选择函数 ”菜单中,单击
abac目录、customers架构,然后单击mask_ssn之前创建的函数。
-
选择“屏蔽”列如果它有特定的标签。 搜索
单击“选择”。
(可选)可以通过扩展 测试函数 并提供输入来测试掩码函数。 例如,输入
901-234-5678并单击 “运行测试 ”将正确返回***-**-****。
单击“创建策略”。
步骤 9:测试策略
- 返回到笔记本并运行以下命令:
SELECT * FROM abac.customers.profiles
SSN 现在返回为 ***-***-***. 仅返回非欧盟居民,因为还启用了行筛选掩码。
| 名字 | 姓氏 | 电话号码 | 地址 | 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 枫叶街 佛罗里达州 | ***-**-**** |
| 汉克 | 摩尔 | 901-234-5678 | 963 核桃街,科罗拉多州 | ***-**-**** |
| 常春藤 | 泰勒 | 012-345-6789 | 159 阿斯彭街, AZ | ***-**-**** |
| 艾米丽 | 白色 | 678-901-2345 | 987 伯奇街, 西澳大利亚州 | ***-**-**** |
| 弗兰克 | 磨坊主 | 789-012-3456 | 741 斯普鲁斯街, WA | ***-**-**** |
| John | 母鹿 | 123-456-7890 | 123 主街, 纽约 | ***-**-**** |