Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Deze handleiding legt uit hoe u een koppeltabel gebruikt om toegang op rij- en kolomniveau te beheren zonder een groot aantal groepen te hoeven beheren. Eén opzoektabel bepaalt zowel rijfilters als kolommaskering. Voor toegangswijzigingen is alleen een rijupdate vereist. U hoeft geen nieuwe groepen te maken of beleidsregels opnieuw te schrijven.
In deze zelfstudie wordt ook voorwaardelijke maskering gedemonstreerd: PII-kolommen worden verschillend gemaskeerd, afhankelijk van de waarde van een andere kolom in dezelfde rij. Orders die zijn gemarkeerd confidential, hebben hun PII volledig geanonimiseerd, ongeacht het machtigingsniveau van de gebruiker.
Zie Toewijzingstabellen gebruiken om een lijst met toegangsbeheer te maken voor algemene richtlijnen voor het ontwerpen van toewijzingstabellen.
Prerequisites
- Databricks Runtime 16.4 of hoger of serverloze berekeningen.
- Beheerdersrechten voor accountbeheerders of werkruimtebeheerders (om beheerde tags te maken).
-
MANAGEmachtiging voor de doelcatalogus of het doelschema. -
EXECUTEop de UDF's. - Een SQL-notebook of query-editor.
Scenario
Uw organisatie heeft werknemers in vier regio's (VS - oost, VS - west, EU, APAC) en vier afdelingen. Elke gebruiker moet alleen de rijen zien die overeenkomen met hun regio en afdeling en PII-kolommen moeten worden gemaskeerd op basis van twee factoren: het machtigingsniveau van de gebruiker (full, maskedof none) dat is opgeslagen in een toewijzingstabel en de volgorde order_priority.
Met een op groepen gebaseerde benadering hebt u een groep nodig voor elke combinatie van regio-afdelingen. U hebt bijvoorbeeld 16 groepen nodig voor vier regio's en vier afdelingen. Het toevoegen van PII-klaringsniveaus verdrievoudigt dat aantal. Voor elke nieuwe regio of afdeling zijn nieuwe groepen en beleidsupdates vereist.
De toewijzingstabelbenadering vervangt dit door één opzoektabel: één rij per gebruiker, één kolom per toegangsdimensie. Als u de toegang van een gebruiker wilt wijzigen, werkt u een rij bij.
Stap 1: beheerde tags maken
Voordat u een SQL-query uitvoert, maakt u de volgende beheerde tags in de Catalog Explorer UI (Catalogus>Beheren>Beheerde tags>Beheerde tag maken):
| Tagsleutel | Toegestane waarden |
|---|---|
region |
(alleen-sleuteltag) |
department |
(alleen-sleuteltag) |
pii |
name, email |
priority |
(tag met alleen sleutel) |
De region en department tags geven het beleid voor rijfilters aan welke kolommen moeten worden doorgegeven aan de filter-UDF. De pii tag vertelt het beleid voor kolommaskers welke kolommen moeten worden gemaskeerd en welk PII-type ze bevatten. Met priority de tag kan het beleid voor kolommaskers de order_priority waarde doorgeven aan de masker-UDF voor voorwaardelijke maskering.
Waarschuwing
Taggegevens worden opgeslagen als tekst zonder opmaak en kunnen globaal worden gerepliceerd. Gebruik geen tagnamen, waarden of descriptors die de beveiliging van uw resources in gevaar kunnen krijgen. Gebruik bijvoorbeeld geen tagnamen, waarden of descriptors die persoonlijke of gevoelige informatie bevatten.
Stap 2: Voorbeeldgegevens bouwen
Maak een catalogustabel, een schematabel en een orderstabel. De order_priority kolom drijft voorwaardelijk maskeren: orders die als confidential zijn gemarkeerd hebben hun PII volledig geredigeerd, zelfs voor gebruikers met hoge autorisatie.
CREATE CATALOG IF NOT EXISTS abac_tutorial;
USE CATALOG abac_tutorial;
CREATE SCHEMA IF NOT EXISTS mapping_demo;
USE SCHEMA mapping_demo;
CREATE OR REPLACE TABLE orders (
order_id INT,
customer_name STRING,
customer_email STRING,
sales_region STRING,
dept STRING,
amount DOUBLE,
order_date DATE,
order_priority STRING
);
INSERT INTO orders VALUES
(1, 'Acme Corp', 'orders@acme.com', 'us_east', 'engineering', 50000, '2025-01-15', 'standard'),
(2, 'Beta Inc', 'sales@beta.com', 'us_east', 'sales', 75000, '2025-02-01', 'confidential'),
(3, 'Gamma LLC', 'info@gamma.com', 'us_west', 'engineering', 30000, '2025-01-20', 'standard'),
(4, 'Delta Co', 'deals@delta.com', 'us_west', 'sales', 95000, '2025-03-01', 'confidential'),
(5, 'Epsilon GmbH', 'kontakt@epsilon.de', 'eu', 'engineering', 45000, '2025-02-15', 'standard'),
(6, 'Zeta SA', 'contact@zeta.fr', 'eu', 'sales', 62000, '2025-01-30', 'standard'),
(7, 'Eta Ltd', 'hello@eta.sg', 'apac', 'marketing', 28000, '2025-03-10', 'confidential'),
(8, 'Theta Corp', 'biz@theta.com', 'us_east', 'marketing', 55000, '2025-02-20', 'standard'),
(9, 'Iota KK', 'info@iota.jp', 'apac', 'engineering', 41000, '2025-01-25', 'standard'),
(10, 'Kappa Inc', 'sales@kappa.com', 'us_west', 'marketing', 33000, '2025-03-05', 'standard');
Stap 3: Beheerde tags toepassen
Tag de kolommen zodat ABAC-beleid ze automatisch kan detecteren. De order_priority kolom wordt gelabeld met de sleutel-alleen priority tag, zodat het kolommaskerbeleid de kolom kan matchen via MATCH COLUMNS en de waarde kan doorgeven aan de masker-UDF.
ALTER TABLE abac_tutorial.mapping_demo.orders
ALTER COLUMN sales_region SET TAGS ('region' = '');
ALTER TABLE abac_tutorial.mapping_demo.orders
ALTER COLUMN dept SET TAGS ('department' = '');
ALTER TABLE abac_tutorial.mapping_demo.orders
ALTER COLUMN customer_name SET TAGS ('pii' = 'name');
ALTER TABLE abac_tutorial.mapping_demo.orders
ALTER COLUMN customer_email SET TAGS ('pii' = 'email');
ALTER TABLE abac_tutorial.mapping_demo.orders
ALTER COLUMN order_priority SET TAGS ('priority' = '');
Stap 4: De toewijzingstabel maken
In plaats van groepen te maken voor elke regio, afdeling en klaringscombinatie, onderhoudt u één tabel met één rij per gebruiker. De pii_access kolom bepaalt hoe PII-kolommen worden weergegeven:
-
full— zie de werkelijke waarde (voor orders met standaardprioriteit) -
masked— zie een gedeeltelijke waarde, zoalsA***ofo***@acme.com -
none— zie***REDACTED***
In expires_on de kolom wordt een vervaldatum ingesteld voor elke toegangsvermelding. Na deze datum stopt de UDF-rijfilter met het matchen van de vermelding, en verliest de gebruiker op de achtergrond de toegang zonder dat er handmatige intrekking nodig is. Dit is handig voor contractanten, tijdelijke overeenkomsten voor gegevensdeling of tijdgebonden projecten.
Als een gebruiker toegang nodig heeft tot meerdere regio- en afdelingscombinaties, voegt u extra rijen toe.
Opmerking
Houd mappingtabellen klein en eenvoudig. Elke query voor een beveiligde tabel voert de rijfilter-UDF's en kolommasker-UDF's uit, die op hun beurt een query uitvoeren op de mappingtabel. Grote toewijzingstabellen en complexe UDF-logica kunnen van invloed zijn op de queryprestaties. Gebruik smalle schema's en behoud waar mogelijk UDF-logica voor één zoekopdracht.
CREATE OR REPLACE TABLE abac_tutorial.mapping_demo.user_access (
user_email STRING,
region STRING,
department STRING,
pii_access STRING,
expires_on DATE
);
INSERT INTO abac_tutorial.mapping_demo.user_access VALUES
(current_user(), 'us_east', 'engineering', 'masked', '2099-12-31'),
('bob@example.com', 'us_west', 'sales', 'full', '2099-12-31'),
('carol@example.com', 'eu', 'engineering', 'none', '2099-12-31'),
('david@example.com', 'apac', 'marketing', 'masked', '2099-12-31');
Stap 5: UDF voor het rijfilter maken
Deze UDF ontvangt de waarden van sales_region en dept van een rij (doorgegeven door het beleid via tagmatching), zoekt de huidige gebruiker op in de toewijzingstabel en retourneert TRUE alleen als er een overeenkomende invoer bestaat en niet is verlopen. Gebruikers die zich niet in de toewijzingstabel bevinden of waarvan de toegang is verlopen, zien geen rijen (mislukt ontwerp).
CREATE OR REPLACE FUNCTION abac_tutorial.mapping_demo.access_filter(
region_val STRING,
dept_val STRING
)
RETURNS BOOLEAN
RETURN EXISTS (
SELECT 1 FROM abac_tutorial.mapping_demo.user_access
WHERE user_email = current_user()
AND region = region_val
AND department = dept_val
AND expires_on >= current_date()
);
Stap 6: UDF voor het kolommasker maken
Met deze UDF bepaalt u hoe PII-kolommen worden weergegeven. Er zijn drie argumenten nodig: de kolomwaarde, het pii-type ('name' of 'email') en de rij order_priority. De maskeringslogica heeft twee lagen:
-
Laag 1 (voorwaardelijke maskering): Als
order_prioritygelijk is aanconfidential, wordt PII altijd volledig weggelaten, ongeacht het machtigingsniveau van de gebruiker. -
Laag 2 (toegangsniveau gebruiker): Voor standaardrijen controleert de UDF de toewijzingstabel op het gebruikersniveau
pii_accessen past het bijbehorende masker toe. Als een gebruiker meerdere vermeldingen in de toewijzingstabel heeft (toegang voor meerdere regio's), geldt de hoogste autorisatie voor alle rijen.
CREATE OR REPLACE FUNCTION abac_tutorial.mapping_demo.pii_mask(
val STRING,
pii_type STRING,
order_pri STRING
)
RETURNS STRING
RETURN CASE
WHEN order_pri = 'confidential' THEN '***REDACTED***'
WHEN EXISTS (
SELECT 1 FROM abac_tutorial.mapping_demo.user_access
WHERE user_email = current_user() AND pii_access = 'full'
) THEN val
WHEN EXISTS (
SELECT 1 FROM abac_tutorial.mapping_demo.user_access
WHERE user_email = current_user() AND pii_access = 'masked'
) THEN
CASE pii_type
WHEN 'email' THEN CONCAT(LEFT(val, 1), '***@', SUBSTRING_INDEX(val, '@', -1))
WHEN 'name' THEN CONCAT(LEFT(val, 1), '***')
ELSE CONCAT(LEFT(val, 1), '***')
END
ELSE '***REDACTED***'
END;
Stap 7: Het beleid maken
Maak drie beleidsregels, die allemaal worden aangestuurd door dezelfde koppelingstabel. Beide beleidsregels voor kolommaskers gebruiken dezelfde pii_mask functie. Het pii_type argument geeft aan welke maskeringsstijl moet worden toegepast, zodat u geen afzonderlijk UDF per kolomtype nodig hebt.
De priority beheerde tag wordt gebruikt MATCH COLUMNS om de order_priority kolom overeen te stemmen en diens waarde door te geven aan de UDF voor maskering als order_pri. Zo wordt voorwaardelijke maskering geïmplementeerd: het beleid geeft de prioriteitswaarde van de rij tijdens het queryproces door aan de UDF.
CREATE POLICY user_access_filter
ON SCHEMA abac_tutorial.mapping_demo
ROW FILTER abac_tutorial.mapping_demo.access_filter
TO `account users`
FOR TABLES
MATCH COLUMNS has_tag('region') AS r, has_tag('department') AS d
USING COLUMNS (r, d);
CREATE POLICY pii_mask_name
ON SCHEMA abac_tutorial.mapping_demo
COLUMN MASK abac_tutorial.mapping_demo.pii_mask
TO `account users`
FOR TABLES
MATCH COLUMNS has_tag_value('pii', 'name') AS m,
has_tag('priority') AS pri
ON COLUMN m
USING COLUMNS ('name', pri);
CREATE POLICY pii_mask_email
ON SCHEMA abac_tutorial.mapping_demo
COLUMN MASK abac_tutorial.mapping_demo.pii_mask
TO `account users`
FOR TABLES
MATCH COLUMNS has_tag_value('pii', 'email') AS m,
has_tag('priority') AS pri
ON COLUMN m
USING COLUMNS ('email', pri);
Stap 8: De resultaten controleren
Met uw mapping tabelvermelding hebt u toegang tot us_east / engineering met masked toestemming. Voer de volgende query uit om te controleren of alleen order 1 wordt weergegeven, waarbij PII gedeeltelijk is gemaskeerd.
SELECT * FROM abac_tutorial.mapping_demo.orders;
Order 1 heeft order_priority = 'standard', dus uw masked toestemming is van toepassing.
Verwacht resultaat voor uw gebruiker:
| order_id | klant_naam | customer_email | verkoopregio | departement | bedrag | besteldatum | order_priority |
|---|---|---|---|---|---|---|---|
| 1 | A*** |
o***@acme.com |
us_east | techniek | 50000 | 2025-01-15 | standaard |
Wat andere gebruikers zien:
| Gebruiker | Zichtbare orders | order_priority | PII-gedrag |
|---|---|---|---|
bob@example.com (full klaring) |
#4 (us_west, verkoop) | vertrouwelijk |
***REDACTED***— vertrouwelijke informatie overschrijdt full toestemming |
carol@example.com (none klaring) |
#5 (eu, engineering) | standaard |
***REDACTED*** — none klaring betekent volledige redaction |
david@example.com (masked klaring) |
#7 (apac, marketing) | vertrouwelijk |
***REDACTED*** — vertrouwelijk overruled toegang masked |
| (cataloguseigenaar) | Alle 10 | — | Alle ontmaskerde items (de eigenaar is vrijgesteld van beleidsregels) |
| (niet-vermelde gebruiker) | Geen | — | Rijfilter retourneert geen rijen |
U ziet dat Bob full toegang heeft maar nog steeds ***REDACTED*** ziet omdat order #4 confidential is. Dit is voorwaardelijk maskeren: de prioriteitswaarde van de rij prevaleert boven de gebruikersrechten.
Stap 9: Toegang dynamisch bijwerken
Het belangrijkste voordeel van de toewijzingstabelbenadering is dat u de toegang kunt wijzigen door rijen in de tabel bij te werken. U hoeft geen beleidsregels, UDF's of groepslidmaatschappen bij te werken.
Opnieuw toewijzen aan een andere afdeling
Wijzig uw afdeling van engineering in sales. Order #2 (Beta Inc) is een confidential verkooporder, dus de PII is volledig geanonimiseerd, zelfs met masked toestemming.
UPDATE abac_tutorial.mapping_demo.user_access
SET department = 'sales'
WHERE user_email = current_user();
Voer de volgende query uit om te controleren. U zou order #2 moeten zien met ***REDACTED*** PII.
SELECT * FROM abac_tutorial.mapping_demo.orders;
De wijziging herstellen:
UPDATE abac_tutorial.mapping_demo.user_access
SET department = 'engineering'
WHERE user_email = current_user();
PII-goedkeuring upgraden
Wijzig uw toestemming van masked in full. Voor rijen met standaardprioriteit ziet u nu de werkelijke PII-waarden.
UPDATE abac_tutorial.mapping_demo.user_access
SET pii_access = 'full'
WHERE user_email = current_user();
Voer de volgende query uit om te controleren. Order #1 heeft standard prioriteit, dus met full goedkeuring ziet u Acme Corp en orders@acme.com.
SELECT * FROM abac_tutorial.mapping_demo.orders;
Draai de wijziging terug:
UPDATE abac_tutorial.mapping_demo.user_access
SET pii_access = 'masked'
WHERE user_email = current_user();
Toegang verlenen tot een extra regio
Voeg een tweede rij toe om toegang te verlenen tot EU-engineering. Er zijn geen nieuwe groepen of beleidsregels vereist.
INSERT INTO abac_tutorial.mapping_demo.user_access
VALUES (current_user(), 'eu', 'engineering', 'masked', '2099-12-31');
Voer de volgende query uit om te controleren. U ziet nu zowel order #1 (us_east, engineering) als order #5 (eu, engineering), waarbij PII gedeeltelijk is gemaskeerd.
SELECT * FROM abac_tutorial.mapping_demo.orders;
Verwijder de extra toegang:
DELETE FROM abac_tutorial.mapping_demo.user_access
WHERE user_email = current_user() AND region = 'eu';
Toegang laten verlopen
Stel uw toegangselement in op een datum in het verleden. De rijfilter UDF controleert expires_on >= current_date(), zodat verlopen vermeldingen zonder melding worden genegeerd en de toegang automatisch wordt ingetrokken. Dit is handig voor aannemers, overeenkomsten voor het delen van gegevens met een vaste duur of tijdgebonden projecten.
UPDATE abac_tutorial.mapping_demo.user_access
SET expires_on = current_date() - INTERVAL 1 DAY
WHERE user_email = current_user();
Voer de volgende query uit om te controleren of er geen rijen worden weergegeven.
SELECT * FROM abac_tutorial.mapping_demo.orders;
Toegang herstellen met een toekomstige vervaldatum:
UPDATE abac_tutorial.mapping_demo.user_access
SET expires_on = '2099-12-31'
WHERE user_email = current_user();
Voer de volgende query uit om te controleren of de toegang is hersteld.
SELECT * FROM abac_tutorial.mapping_demo.orders;
Overzicht
In deze zelfstudie zijn drie patronen gedemonstreerd:
- Toewijzingstabelpatroon: één enkele opzoektabel bepaalt zowel het filteren van rijen als het maskeren van kolommen. Toegangswijzigingen worden aangebracht door rijen bij te werken, zonder dat er beleids- of groepswijzigingen nodig zijn.
-
Voorwaardelijke maskering: de masker-UDF controleert de
order_prioritykolom op elke rij om te bepalen hoe piI moet worden gemaskeerd. Vertrouwelijke rijen worden altijd volledig geanonimiseerd, ongeacht het machtigingsniveau van de gebruiker, geïmplementeerd door het taggen vanorder_priorityen het doorgeven aan de UDF viaMATCH COLUMNS. -
Verloop van toegang: de mappingtabel bevat een
expires_ondatum. Het rijfilter UDF controleert deze datum tegencurrent_date(), zodat verlopen records stilletjes worden genegeerd en automatisch worden ingetrokken zonder handmatige interventie.
Schoonmaken
Als u alle objecten wilt verwijderen die in deze zelfstudie zijn gemaakt, voert u het volgende uit.
DROP POLICY user_access_filter ON SCHEMA abac_tutorial.mapping_demo;
DROP POLICY pii_mask_name ON SCHEMA abac_tutorial.mapping_demo;
DROP POLICY pii_mask_email ON SCHEMA abac_tutorial.mapping_demo;
DROP FUNCTION IF EXISTS abac_tutorial.mapping_demo.access_filter;
DROP FUNCTION IF EXISTS abac_tutorial.mapping_demo.pii_mask;
DROP TABLE IF EXISTS abac_tutorial.mapping_demo.orders;
DROP TABLE IF EXISTS abac_tutorial.mapping_demo.user_access;
DROP SCHEMA IF EXISTS abac_tutorial.mapping_demo CASCADE;
Gebruik de Catalog Explorer UI om de beheerde tags region, department, pii en priority te verwijderen.