重要
此功能在 Beta 版中。
本教程介绍如何在 Unity 目录中配置行筛选器和列掩码基于属性的访问控制(ABAC)策略。
在此示例中,分析团队不应能够访问特定的客户记录或 SSN,但是他们应该能够访问同一表中的其他客户和客户数据。 本教程包括以下内容:
启用标记策略和 ABAC 测试版
创建标记策略
创建 Unity Catalog 目录、模式和表
将受治理的标记应用于列
创建 UDF 以隐藏欧盟成员的数据
创建行筛选器策略
创建用于隐藏 SSN 的 UDF
创建列掩码策略
按照策略选择您的表格
有关配置 ABAC 的演示,请参阅使用 Unity Catalog 目录了解基于属性的访问控制(ABAC)。
计算要求
- 必须在 Databricks Runtime 16.4 或更高版本上使用计算。
运行较旧运行时的计算无法访问 ABAC 保护的表。 作为临时解决方法,可以将 ABAC 配置为仅适用于特定组。 将要限制的用户添加到该组。 不在组中的用户仍然可以访问表。
步骤 1:启用标记策略和 ABAC Beta 版
作为帐户管理员,登录到帐户控制台。
在边栏中,单击“ 预览”。
将标记策略切换为开。
作为工作区管理员,单击 Azure Databricks 工作区顶部栏中的用户名。
从菜单中选择 预览。
将 “基于属性的访问控制 ”开关设置为 “开”。
步骤 2:创建标记策略
若要创建标记策略,必须在帐户级别具有标记策略 CREATE 权限。 默认情况下,帐户和工作区管理员具有创建权限。
在 Azure Databricks 工作区中,单击
目录。
在“ 快速访问 ”页上,单击“ 标记策略 > ”按钮。
单击“ 创建标记策略”。
输入标记键
pii
。输入标记策略的描述。
输入标记的允许值:
ssn
和address
。 只能将这些值分配给此标记键。单击 “创建” 。
警告
标记数据以纯文本形式存储,可全局复制。 不要使用标记名称、值或描述符,这些标记名称或描述符可能会损害资源的安全性。 例如,不要使用包含个人或敏感信息的标记名称、值或描述符。
步骤 3:创建客户表
若要执行这些步骤,您必须在 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');
步骤 4:将受治理的标记添加到 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');
步骤 5:创建 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(这意味着它不是欧盟地址)。
步骤 6:创建行筛选器策略
单击
目录。
在
abac
目录旁边,单击烤肉串单击在目录资源管理器中打开。
单击“策略”选项卡。
单击“新建策略”。
在 “常规”中,输入策略的名称
hide_eu_customers
和说明。在 负责人中:
- 在 “应用于...”中,搜索并选择策略适用的主体。 在此示例中,可以使用组 所有帐户用户。
- 将除了……保留为空。
在 Type 和 target 中:
- 在 “策略类型”中,选择 “行筛选器”。
- 在 策略目标中
abac
,选择策略范围的目录。 - 将 表级别条件 留空。
在 Function 中,选择您在
is_not_eu_address
创建的函数abac.customers
。在 “何时”列旁边,选择 具有标记值。
在 “键”中,选择
pii
并在 “值 ”中选择address
。单击“创建策略”。
步骤 7:测试策略
返回到笔记本并运行以下命令:
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 Doe 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 可以继续创建列掩码策略。
步骤 8:创建用于屏蔽 SSN 的 UDF
将以下命令添加到笔记本并运行它:
-- Masks any SSN input by returning a fully masked value CREATE FUNCTION mask_SSN(ssn STRING) RETURN '***-**-****' ;
此 UDF 返回完全掩码的 SSN 字符串 ('***-**-****'),
步骤 9:创建列掩码策略
单击
目录。
在
abac
目录旁边,单击烤肉串单击在目录资源管理器中打开。
单击“策略”选项卡。
单击“新建策略”。
在 “常规”中,输入策略的名称
mask_ssn
和说明。在 负责人中:
- 在 “应用于...”中,搜索并选择策略适用的主体。 在此示例中,可以使用组 所有帐户用户。
- 将除了……保留为空。
在 Type 和 target 中:
- 在 策略类型中,选择 “列掩码”。
- 在 策略目标中
abac
,选择策略范围的目录。 - 将 表级别条件 留空。
在 Function 中,选择您在
mask_SSN
创建的函数abac.customers
。在 “何时”列旁边,选择 具有标记值。
在 “键”中,选择
pii
并在 “值 ”中选择ssn
。单击“创建策略”。
步骤 10:测试策略
返回到笔记本并运行以下命令:
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 Doe 123-456-7890 123 主街, 纽约 ***-**-****