Delen via


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:

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 en USE 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

  1. Klik in uw Azure Databricks-werkruimte op Cataloguspictogram Catalogus.
  2. Blader of zoek naar de tabel die u wilt filteren.
  3. Klik op het tabblad Overzicht op Rijfilter: Filter toevoegen.
  4. Selecteer in het dialoogvenster Rijfilter toevoegen de catalogus en het schema die de filterfunctie bevatten en selecteer vervolgens de functie.
  5. Bekijk in het uitgevouwen dialoogvenster de functiedefinitie en selecteer de tabelkolommen die overeenkomen met de kolommen die zijn opgenomen in de functie-instructie.
  6. 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.

  1. Het rijfilter maken:

    CREATE FUNCTION <function_name> (<parameter_name> <parameter_type>, ...)
    RETURN {filter clause whose output must be a boolean};
    
  2. 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

  1. Klik in uw Azure Databricks-werkruimte op Cataloguspictogram Catalogus.
  2. Blader of zoek naar de tabel.
  3. Zoek op het tabblad Overzicht de rij waarop u het kolommasker wilt toepassen en klik op het Pictogram Bewerken pictogram Masker bewerken.
  4. Selecteer in het dialoogvenster Kolommasker toevoegen de catalogus en het schema die de filterfunctie bevatten en selecteer vervolgens de functie.
  5. 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.
  6. 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.

  1. Een kolommasker maken:

    CREATE FUNCTION <function_name> (<parameter_name> <parameter_type>, ...)
    RETURN {expression with the same type as the first parameter};
    
  2. 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 gebruik CREATE 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 door UPDATE en DELETE instructies en worden niet toegepast op gegevens die zijn geschreven (inclusief INSERT).

  • 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.