Gevoelige tabelgegevens filteren met rijfilters en kolommaskers
Belangrijk
Deze functie is beschikbaar als openbare preview.
Dit artikel bevat richtlijnen en voorbeelden voor het gebruik van rijfilters, kolommaskers en toewijzingstabellen om gevoelige gegevens in uw tabellen te filteren. Voor deze functies is Unity Catalog vereist.
Wat zijn rijfilters?
Met rijfilters kunt u een filter toepassen op een tabel, zodat query's alleen rijen retourneren die voldoen aan de filtercriteria. U implementeert een rijfilter als een door de gebruiker gedefinieerde SQL-functie (UDF). Python en Scala UDF's worden ook ondersteund, maar alleen wanneer ze zijn verpakt in SQL UDF's.
Wat zijn kolommaskers?
Met kolommaskers kunt u een maskeringsfunctie toepassen op een tabelkolom. De maskeringsfunctie evalueert tijdens queryruntime, waarbij elke verwijzing van de doelkolom wordt vervangen door de resultaten van de maskeringsfunctie. In de meeste gevallen bepalen kolommaskers of de oorspronkelijke kolomwaarde moet worden geretourneerd of op basis van de identiteit van de aanroepende gebruiker moet worden bewerkt. Kolommaskers zijn expressies die zijn geschreven als SQL UDF's of als Python of Scala UDF's die zijn verpakt in SQL UDF's.
Op elke tabelkolom kan slechts één maskeringsfunctie worden toegepast. De maskeringsfunctie gebruikt de niet-gemaskeerde waarde van de kolom als invoer en retourneert de gemaskeerde waarde als resultaat. De retourwaarde van de maskeringsfunctie moet hetzelfde type zijn als de kolom die wordt gemaskeerd. De maskeringsfunctie kan ook extra kolommen als invoerparameters gebruiken en gebruiken in de maskeringslogica.
Wat is het verschil tussen deze filters en dynamische weergaven?
Met dynamische weergaven, rijfilters en kolommaskers kunt u complexe logica toepassen op tabellen en hun filterbeslissingen tijdens queryruntime verwerken.
Een dynamische weergave is een abstracte, alleen-lezenweergave van een of meer brontabellen. De gebruiker heeft rechtstreeks toegang tot een dynamische weergave zonder rechtstreeks toegang te hebben tot de brontabellen. Als u een dynamische weergave maakt, wordt een nieuwe tabelnaam gedefinieerd die niet overeenkomt met de naam van brontabellen of andere tabellen en weergaven die aanwezig zijn in hetzelfde schema.
Aan de andere kant past het koppelen van een rijfilter of kolommasker aan een doeltabel de bijbehorende logica rechtstreeks toe op de tabel zelf zonder nieuwe tabelnamen te introduceren. Volgende query's kunnen rechtstreeks naar de doeltabel verwijzen met behulp van de oorspronkelijke naam.
Gebruik dynamische weergaven als u transformatielogica, zoals filters en maskers, wilt toepassen op alleen-lezentabellen en als het acceptabel is voor gebruikers om te verwijzen naar de dynamische weergaven met verschillende namen. Als u gegevens wilt filteren wanneer u deze deelt met Delta Sharing, moet u dynamische weergaven gebruiken. Gebruik rijfilters en kolommaskers als u expressies voor specifieke gegevens wilt filteren of berekenen, maar gebruikers nog steeds toegang wilt bieden tot de tabellen met hun oorspronkelijke namen.
Voordat u begint
Als u rijfilters en kolommaskers wilt toevoegen aan tabellen, moet u het volgende hebben:
- Een werkruimte die is ingeschakeld voor Unity Catalog.
- Een functie die is geregistreerd in Unity Catalog. Dit kan een SQL UDF of een Python- of Scala UDF zijn die is geregistreerd in Unity Catalog en verpakt in een SQL UDF. Zie Wat zijn door de gebruiker gedefinieerde functies (UDF's)?, kolommaskercomponent en ROW FILTER-component voor meer informatie.
U moet ook voldoen aan de volgende vereisten:
- Als u een functie wilt toewijzen waarmee rijfilters of kolommaskers aan een tabel worden toegevoegd, moet u over de
EXECUTE
bevoegdheid beschikken voor de functie,USE SCHEMA
in het schema enUSE CATALOG
in de bovenliggende catalogus. - Als u filters of maskers wilt toevoegen wanneer u een nieuwe tabel maakt, moet u ook de
CREATE TABLE
bevoegdheid voor het schema hebben. - Als u filters of maskers wilt toevoegen door een bestaande tabel te wijzigen, moet u ook de eigenaar van de tabel zijn of de
MODIFY
bevoegdheid voor de tabel hebben.
Als u toegang wilt krijgen tot een tabel met rijfilters of kolommaskers, moet uw rekenresource voldoen aan een van de volgende vereisten:
Een SQL-warehouse
Modus voor gedeelde toegang op Databricks Runtime 12.2 LTS of hoger
Toegangsmodus voor één gebruiker in Databricks Runtime 15.4 LTS of hoger (openbare preview).
U kunt rijfilters of kolommaskers niet lezen met behulp van rekenkracht van één gebruiker in Databricks Runtime 15.3 of lager.
Als u wilt profiteren van het filteren van gegevens in Databricks Runtime 15.4 LTS en hoger, moet u ook controleren of uw werkruimte is ingeschakeld voor serverloze berekeningen, omdat de functionaliteit voor gegevensfilters die rijfilters en kolommaskers ondersteunt, wordt uitgevoerd op serverloze berekeningen. Daarom worden er mogelijk kosten in rekening gebracht voor serverloze rekenresources wanneer u rekenkracht van één gebruiker gebruikt om tabellen te lezen die rijfilters of kolommaskers gebruiken. Zie Gedetailleerd toegangsbeheer voor rekenkracht van één gebruiker.
Een rijfilter toepassen
Als u een rijfilter wilt maken, schrijft u een functie (UDF) om het filterbeleid te definiëren en past u dit vervolgens toe op een tabel. Elke tabel kan slechts één rijfilter hebben. Een rijfilter accepteert nul of meer invoerparameters waarbij elke invoerparameter wordt gekoppeld aan één kolom van de bijbehorende tabel.
U kunt een rijfilter toepassen met behulp van Catalog Explorer of SQL-opdrachten. In de instructies van Catalog Explorer wordt ervan uitgegaan dat u al een functie hebt gemaakt en dat deze is geregistreerd in Unity Catalog. De SQL-instructies bevatten voorbeelden van het maken van een rijfilterfunctie en het toepassen op een tabel.
Catalogusverkenner
- Klik in uw Azure Databricks-werkruimte op Catalogus.
- Blader of zoek naar de tabel die u wilt filteren.
- Klik op het tabblad Overzicht op Rijfilter: Filter toevoegen.
- Selecteer in het dialoogvenster Rijfilter toevoegen de catalogus en het schema die de filterfunctie bevatten en selecteer vervolgens de functie.
- Bekijk in het uitgevouwen dialoogvenster de functiedefinitie en selecteer de tabelkolommen die overeenkomen met de kolommen die zijn opgenomen in de functie-instructie.
- Klik op Toevoegen.
Als u het filter uit de tabel wilt verwijderen, klikt u op fx Rijfilter en klikt u op Verwijderen.
SQL
Als u een rijfilter wilt maken en deze vervolgens wilt toevoegen aan een bestaande tabel, gebruikt CREATE FUNCTION
en past u de functie toe met behulp van ALTER TABLE
. U kunt ook een functie toepassen wanneer u een tabel maakt met behulp van CREATE TABLE
.
Het rijfilter maken:
CREATE FUNCTION <function_name> (<parameter_name> <parameter_type>, ...) RETURN {filter clause whose output must be a boolean};
Pas het rijfilter toe op een tabel met behulp van een kolomnaam:
ALTER TABLE <table_name> SET ROW FILTER <function_name> ON (<column_name>, ...);
Aanvullende syntaxisvoorbeelden:
Een rijfilter uit een tabel verwijderen:
ALTER TABLE <table_name> DROP ROW FILTER;
Een rijfilter wijzigen:
Run a DROP FUNCTION statement to drop the existing function, or use CREATE OR REPLACE FUNCTION to replace it.
Een rijfilter verwijderen:
ALTER TABLE <table_name> DROP ROW FILTER; DROP FUNCTION <function_name>;
Notitie
U moet de
ALTER TABLE ... DROP ROW FILTER
opdracht uitvoeren voordat u de functie neer zet. Als u dat niet doet, heeft de tabel een niet-toegankelijke status.Als de tabel op deze manier ontoegankelijk wordt, wijzigt u de tabel en zet u de zwevende rijfilterverwijzing neer met behulp van
ALTER TABLE <table_name> DROP ROW FILTER;
.
Zie ook de COMPONENT ROW FILTER.
Voorbeelden van rijfilters
In dit voorbeeld wordt een door de gebruiker gedefinieerde SQL-functie gemaakt die van toepassing is op leden van de groep admin
in de regio US
.
Wanneer deze voorbeeldfunctie wordt toegepast op de sales
tabel, hebben leden van de admin
groep toegang tot alle records in de tabel. Als de functie wordt aangeroepen door een niet-beheerder, mislukt de RETURN_IF
voorwaarde en wordt de region='US'
expressie geëvalueerd, waarbij de tabel wordt gefilterd om alleen records in de US
regio weer te geven.
CREATE FUNCTION us_filter(region STRING)
RETURN IF(IS_ACCOUNT_GROUP_MEMBER('admin'), true, region='US');
Pas de functie toe op een tabel als rijfilter. Volgende query's uit de sales
tabel retourneren vervolgens een subset rijen.
CREATE TABLE sales (region STRING, id INT);
ALTER TABLE sales SET ROW FILTER us_filter ON (region);
Schakel het rijfilter uit. Toekomstige gebruikersquery's uit de sales
tabel retourneren vervolgens alle rijen in de tabel.
ALTER TABLE sales DROP ROW FILTER;
Maak een tabel met de functie die is toegepast als een rijfilter als onderdeel van de CREATE TABLE
instructie. Toekomstige query's uit de sales
tabel retourneren vervolgens een subset van rijen.
CREATE TABLE sales (region STRING, id INT)
WITH ROW FILTER us_filter ON (region);
Een kolommasker toepassen
Als u een kolommasker wilt toepassen, maakt u een functie (UDF) en past u deze vervolgens toe op een tabelkolom.
U kunt een kolommasker toepassen met behulp van Catalog Explorer of SQL-opdrachten. In de instructies van Catalog Explorer wordt ervan uitgegaan dat u al een functie hebt gemaakt en dat deze is geregistreerd in Unity Catalog. De SQL-instructies bevatten voorbeelden van het maken van een kolommaskerfunctie en het toepassen ervan op een tabelkolom.
Catalogusverkenner
- Klik in uw Azure Databricks-werkruimte op Catalogus.
- Blader of zoek naar de tabel.
- Zoek op het tabblad Overzicht de rij waarop u het kolommasker wilt toepassen en klik op het pictogram Masker bewerken.
- Selecteer in het dialoogvenster Kolommasker toevoegen de catalogus en het schema die de filterfunctie bevatten en selecteer vervolgens de functie.
- Bekijk de functiedefinitie in het uitgevouwen dialoogvenster. Als de functie parameters bevat naast de kolom die wordt gemaskeerd, selecteert u de tabelkolommen waarnaar u deze aanvullende functieparameters wilt casten.
- Klik op Toevoegen.
Als u het kolommasker uit de tabel wilt verwijderen, klikt u op fx Column Mask in de tabelrij en klikt u op Verwijderen.
SQL
Als u een kolommasker wilt maken en deze wilt toevoegen aan een bestaande tabelkolom, gebruikt CREATE FUNCTION
en past u de maskeringsfunctie toe met behulp van ALTER TABLE
. U kunt ook een functie toepassen wanneer u een tabel maakt met behulp van CREATE TABLE
.
U gebruikt SET MASK
om de maskeringsfunctie toe te passen. Binnen de MASK
component kunt u een van de ingebouwde Runtime-functies van Azure Databricks gebruiken of andere door de gebruiker gedefinieerde functies aanroepen. Veelvoorkomende gebruiksvoorbeelden zijn het inspecteren van de identiteit van de aanroepende gebruiker die de functie uitvoert door de groepen te gebruiken current_user( )
of op te halen waarvan ze lid is_account_group_member( )
zijn. Zie de component Kolommasker en ingebouwde functies voor meer informatie.
Een kolommasker maken:
CREATE FUNCTION <function_name> (<parameter_name> <parameter_type>, ...) RETURN {expression with the same type as the first parameter};
Pas het kolommasker toe op een kolom in een bestaande tabel:
ALTER TABLE <table_name> ALTER COLUMN <col_name> SET MASK <mask_func_name> USING COLUMNS <additional_columns>;
Aanvullende syntaxisvoorbeelden:
Een kolommasker verwijderen uit een kolom in een tabel:
ALTER TABLE <table_name> ALTER COLUMN <column where mask is applied> DROP MASK;
Een kolommasker wijzigen:
DROP
de bestaande functie of het gebruikCREATE OR REPLACE TABLE
.Een kolommasker verwijderen:
ALTER TABLE <table_name> ALTER COLUMN <column where mask is applied> DROP MASK; DROP FUNCTION <function_name>;
Notitie
U moet de
ALTER TABLE
opdracht uitvoeren voordat u de functie neer zet of de tabel een niet-toegankelijke status heeft.Als de tabel op deze manier ontoegankelijk wordt, wijzigt u de tabel en zet u de verwijzing naar het zwevende masker neer met behulp van
ALTER TABLE <table_name> ALTER COLUMN <column where mask is applied> DROP MASK;
.
Voorbeelden van kolommaskers
In dit voorbeeld maakt u een door de gebruiker gedefinieerde functie waarmee de ssn
kolom wordt gemaskeerd, zodat alleen gebruikers die lid zijn van de HumanResourceDept
groep waarden in die kolom kunnen weergeven.
CREATE FUNCTION ssn_mask(ssn STRING)
RETURN CASE WHEN is_member('HumanResourceDept') THEN ssn ELSE '***-**-****' END;
Pas de nieuwe functie toe op een tabel als kolommasker. U kunt het kolommasker toevoegen wanneer u de tabel of daarna maakt.
--Create the `users` table and apply the column mask in a single step:
CREATE TABLE users (
name STRING,
ssn STRING MASK ssn_mask);
--Create the `users` table and apply the column mask after:
CREATE TABLE users
(name STRING, ssn STRING);
ALTER TABLE users ALTER COLUMN ssn SET MASK ssn_mask;
Query's in die tabel retourneren nu gemaskeerde ssn
kolomwaarden wanneer de querygebruiker geen lid is van de HumanResourceDept
groep:
SELECT * FROM users;
James ***-**-****
Als u het kolommasker wilt uitschakelen zodat query's de oorspronkelijke waarden in de ssn
kolom retourneren:
ALTER TABLE users ALTER COLUMN ssn DROP MASK;
Toewijzingstabellen gebruiken om een toegangsbeheerlijst te maken
Als u beveiliging op rijniveau wilt bereiken, kunt u een toewijzingstabel (of toegangsbeheerlijst) definiëren. Elke toewijzingstabel is een uitgebreide toewijzingstabel die codeert welke gegevensrijen in de oorspronkelijke tabel toegankelijk zijn voor bepaalde gebruikers of groepen. Toewijzingstabellen zijn handig omdat ze eenvoudige integratie met uw feitentabellen bieden via directe joins.
Deze methodologie bewijst nuttig bij het aanpakken van veel gebruiksvoorbeelden met aangepaste vereisten. Voorbeelden zijn:
- Beperkingen opleggen op basis van de aangemelde gebruiker terwijl verschillende regels voor specifieke gebruikersgroepen worden meegestuurd.
- Complexe hiërarchieën maken, zoals organisatiestructuren, waarvoor diverse sets regels zijn vereist.
- Complexe beveiligingsmodellen repliceren vanuit externe bronsystemen.
Door op deze manier toewijzingstabellen te gebruiken, kunt u deze uitdagende scenario's effectief aanpakken en robuuste beveiligings-implementaties op rij- en kolomniveau garanderen.
Voorbeelden van toewijzingstabellen
Gebruik een toewijzingstabel om te controleren of de huidige gebruiker in een lijst staat:
USE CATALOG main;
Maak een nieuwe toewijzingstabel:
DROP TABLE IF EXISTS valid_users;
CREATE TABLE valid_users(username string);
INSERT INTO valid_users
VALUES
('fred@databricks.com'),
('barney@databricks.com');
Maak een nieuw filter:
Notitie
Alle filters worden uitgevoerd met de rechten van de definer, met uitzondering van functies die de gebruikerscontext controleren (bijvoorbeeld de CURRENT_USER
en IS_MEMBER
functies) die als aanroeper worden uitgevoerd.
In dit voorbeeld controleert de functie of de huidige gebruiker zich in de valid_users
tabel bevindt. Als de gebruiker wordt gevonden, retourneert de functie waar.
DROP FUNCTION IF EXISTS row_filter;
CREATE FUNCTION row_filter()
RETURN EXISTS(
SELECT 1 FROM valid_users v
WHERE v.username = CURRENT_USER()
);
In het onderstaande voorbeeld wordt het rijfilter toegepast tijdens het maken van de tabel. U kunt het filter ook later toevoegen met behulp van een ALTER TABLE
instructie. Wanneer u een hele tabel toepast, gebruikt u de ON ()
syntaxis. Voor een specifiek rijgebruik ON (row);
.
DROP TABLE IF EXISTS data_table;
CREATE TABLE data_table
(x INT, y INT, z INT)
WITH ROW FILTER row_filter ON ();
INSERT INTO data_table VALUES
(1, 2, 3),
(4, 5, 6),
(7, 8, 9);
Selecteer gegevens uit de tabel. Hiermee worden alleen gegevens geretourneerd als de gebruiker zich in de valid_users
tabel bevindt.
SELECT * FROM data_table;
Maak een toewijzingstabel met accounts die altijd toegang moeten hebben om alle rijen in de tabel weer te geven, ongeacht de kolomwaarden:
CREATE TABLE valid_accounts(account string);
INSERT INTO valid_accounts
VALUES
('admin'),
('cstaff');
Maak nu een SQL UDF die retourneert true
als de waarden van alle kolommen in de rij kleiner zijn dan vijf, of als de aanroepgebruiker lid is van de bovenstaande toewijzingstabel.
CREATE FUNCTION row_filter_small_values (x INT, y INT, z INT)
RETURN (x < 5 AND y < 5 AND z < 5)
OR EXISTS(
SELECT 1 FROM valid_accounts v
WHERE IS_ACCOUNT_GROUP_MEMBER(v.account));
Pas ten slotte de SQL UDF als rijfilter toe op de tabel:
ALTER TABLE data_table SET ROW FILTER row_filter_small_values ON (x, y, z);
Ondersteunde functies en indelingen
Databricks SQL- en Databricks-notebooks voor SQL-workloads worden ondersteund.
DML-opdrachten door gebruikers met
MODIFY
bevoegdheden worden ondersteund. Filters en maskers worden toegepast op de gegevens die worden gelezen doorUPDATE
enDELETE
instructies en worden niet toegepast op gegevens die zijn geschreven (inclusiefINSERT
).Ondersteunde gegevensindelingen:
- Delta en Parquet voor beheerde en externe tabellen.
- Meerdere andere gegevensindelingen voor refererende tabellen die zijn geregistreerd in Unity Catalog met behulp van Lakehouse Federation.
SQL-, Python- en Scala UDF's worden ondersteund als rijfilter- of kolommaskerfuncties, zolang ze zijn geregistreerd in Unity Catalog. Python- en Scala-UDF's moeten worden verpakt in een SQL UDF.
Weergaven in tabellen met kolommaskers of rijfilters worden ondersteund.
Delta Lake-gegevensfeeds voor wijzigingen worden ondersteund zolang het schema compatibel is met de rijfilters en kolommaskers die van toepassing zijn op de doeltabel.
MERGE
instructies worden ondersteund wanneer brontabellen, doeltabellen of beide rijfilters en kolommaskers gebruiken. Dit omvat tabellen met rijfilterfuncties die eenvoudige subquery's bevatten, maar er zijn beperkingen, vermeld in de volgende sectie.Databricks SQL gerealiseerde weergaven en Databricks SQL-streamingtabellen ondersteunen rijfilters en kolommaskers (openbare preview):
- U kunt rijfilters en kolommaskers toevoegen aan een Databricks SQL Materialized-weergave of streamingtabel.
- U kunt databricks SQL gerealiseerde weergaven of streamingtabellen definiëren voor tabellen met rijfilters en kolommaskers.
Beperkingen
- Databricks Runtime-versies onder 12.2 LTS bieden geen ondersteuning voor rijfilters of kolommaskers. Deze runtimes mislukken veilig, wat betekent dat als u toegang probeert te krijgen tot tabellen uit niet-ondersteunde versies van deze runtimes, er geen gegevens worden geretourneerd.
- Gerealiseerde weergaven en streamingtabellen die zijn gedeclareerd in Delta Live Tables bieden geen ondersteuning voor rijfilters of kolommaskers.
- Delta Sharing werkt niet met beveiliging op rijniveau of kolommaskers.
- Tijdreizen werkt niet met beveiliging op rijniveau of kolommaskers.
- Tabelsampling werkt niet met beveiliging op rijniveau of kolommaskers.
- Padgebaseerde toegang tot bestanden in tabellen met beleid wordt niet ondersteund.
- Rijfilter- of kolommaskerbeleid met kringafhankelijkheden terug naar het oorspronkelijke beleid worden niet ondersteund.
- Diepe en ondiepe klonen worden niet ondersteund.
MERGE
instructies bieden geen ondersteuning voor tabellen met beleidsregels voor rijfilters die nesten, aggregaties, vensters, limieten of niet-deterministische functies bevatten.- Delta Lake-API's worden niet ondersteund.
SHOW CREATE TABLE
in gerealiseerde weergaven en streamingtabellen worden geen informatie over rijfilters en kolommaskers weergegeven.
Rekenbeperking voor één gebruiker
U hebt geen toegang tot een tabel met rijfilters of kolommaskers van een rekenresource voor één gebruiker in Databricks Runtime 15.3 of lager. U kunt de toegangsmodus voor één gebruiker gebruiken in Databricks Runtime 15.4 LTS of hoger (openbare preview), als uw werkruimte is ingeschakeld voor serverloze berekeningen. Zie Fijnmazig toegangsbeheer voor rekenkracht van één gebruiker voor meer informatie.
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor