Gedrag van beleidsevaluatie en runtime

Op deze pagina wordt uitgelegd hoe ABAC-beleid wordt geëvalueerd tijdens het uitvoeren van query's, waaronder:

  • Hoe conflicten tussen meerdere beleidsregels worden verwerkt
  • Hoe het casten van kolommaskertypen werkt
  • Welke beveiligingsmaatregelen voorkomen dat gegevens worden blootgesteld wanneer tags of functies waarvan een beleid afhankelijk is, worden verwijderd

Beleidsevaluatie en -afdwinging

Wanneer een gebruiker een query op een tabel opvraagt, wordt abac-evaluatie uitgevoerd in twee fasen: beleidsevaluatie in Unity Catalog en beleidsafdwinging in de Databricks Runtime.

Verschillende gebruikers zien mogelijk verschillende resultaten van dezelfde query, omdat beleidsevaluatie afhankelijk is van de identiteit van de gebruiker, groepslidmaatschappen en de tags op de gegevens die ze openen. Wijzigingen in het groepslidmaatschap of de tagtoewijzingen veranderen dynamisch het effectieve beleid op het moment van de query.

Beleidsevaluatie (Unity Catalog)

Unity Catalog voert de volgende stappen uit met behulp van de metagegevens van het beveiligbare object (zoals beheerde tagtoewijzingen) en de identiteit van de opvragende gebruiker en zijn groepslidmaatschappen:

  1. Identificeert alle beleidsregels waarvan het bereik betrekking heeft op de opgevraagde tabel.
  2. Voor elk van deze beleidsregels controleert u of de querygebruiker zich in de TO lijst bevindt en niet in de EXCEPT lijst.
  3. Evalueert voor elk beleid tabel- en kolomvoorwaarden op basis van de tags in het opgevraagde object, inclusief overgenomen tags. De voorwaarden voor kolommen moeten overeenkomen met ten minste één kolom.
  4. Als het beleid van toepassing is, bepaalt u het effectieve rijfilter of kolommasker en verzendt u het naar databricks Runtime als onderdeel van de metagegevens van de tabel.

Afdwinging van beleid (Databricks Runtime)

De Databricks Runtime-queryplanner vertaalt het effectieve rijfilter of kolommasker in een veilige weergave boven op de tabelscans die filteren en maskeren afdwingen tijdens het uitvoeren van query's. Dit is hetzelfde afdwingingsmechanisme dat wordt gebruikt voor rijfilters en kolommaskers op tabelniveau.

Ontwerp met gesloten-stand bij storing

ABAC volgt een niet-gesloten model, waarbij Azure Databricks standaard toegang weigert als de beveiliging niet kan worden geverifieerd. Azure Databricks alleen toegang tot met ABAC beveiligde tabellen toestaat wanneer alle toepasselijke beleidsregels veilig kunnen worden afgedwongen. Dit geldt voor niet-ondersteunde rekenversies, specifieke bewerkingen op de onderliggende tabelgegevens en situaties waarin de afhankelijkheden van een beleid (tags of functies) zijn verwijderd.

Niet-ondersteunde computerversies

ABAC-beleid vereist Databricks Runtime 16.4 of hoger of serverloze berekeningen. Als een gebruiker probeert toegang te krijgen tot een door ABAC beveiligde tabel vanuit een niet-ondersteunde versie, mislukt de query (toegang wordt geweigerd) om niet-beveiligde gegevensblootstelling te voorkomen.

Op dedicatetoegangsmodus delegeert Azure Databricks handhaving aan serverloze computing om te garanderen dat fijnmazig toegangsbeheer wordt toegepast. Als u gebruikers van oudere runtimes toegang wilt geven tot deze tabellen, moet u ze expliciet uitsluiten van het beleid.

Niet-ondersteunde bewerkingen op beveiligde gegevens

Bepaalde bewerkingen zijn niet compatibel met rijfilters of kolommaskers. Deze bewerkingen mislukken in plaats van de handhaving te omzeilen. Om deze uit te voeren, moet de principal worden vermeld in de EXCEPT clausule van elk ABAC-beleid dat van toepassing is op de tabel. Vrijgestelde principals zijn niet onderworpen aan het beleid, dus Azure Databricks hoeft dit niet af te dwingen en kan de bewerking veilig toestaan.

Bewerkingen waarvoor de uitvoer-principal moet worden uitgesloten, zijn onder andere pijplijnvernieuwingen, back-upprocessen en administratieve werkstromen, zoals:

  • Toegang tot met ABAC beveiligde tabellen bij computatie die de Databricks Runtime-versies lager dan 16.4 gebruiken
  • Queries voor tijdreizen
  • Diep en ondiep klonen
  • Delta Delen, waarbij de eigenaar van de share moet worden vrijgesteld van het beleid en over de vereiste machtigingen voor Delta Delen moet beschikken. Houd er rekening mee dat het beleid niet van toepassing is op de toegang van de geadresseerde.
  • Vectorzoekindex maken en synchroniseren

Zie ABAC-vereisten, quota en beperkingen voor meer informatie over deze en andere beperkingen.

Beleidsafhankelijkheden verwijderd

ABAC-beleid is afhankelijk van beheerde tags en UDF's. Als een van deze afhankelijkheden wordt verwijderd terwijl een beleid ernaar verwijst, mislukken query's op tabellen in het bereik van het beleid.

De beheerde tagverwijdering

Als u een beheerde tag verwijdert waarnaar een ABAC-beleid verwijst, mislukken alle query's voor het object waaraan het beleid is gekoppeld en de onderliggende objecten mislukken met een INVALID_PARAMETER_VALUE.UC_ABAC_UNKNOWN_TAG_POLICY fout. Dit gebeurt zelfs als de tag niet is toegepast op de opgevraagde tabellen.

Wanneer een beheerde tag wordt verwijderd, wordt deze een onbeheerde tag. De toegestane waardebeperkingen worden verwijderd en iedereen met APPLY TAG kan waarden wijzigen zonder de ASSIGN bevoegdheid.

Waarschuwing

De gebruikersinterface en API verhinderen niet dat een beheerde tag wordt verwijderen waarnaar wordt verwezen in een ABAC-beleid. Voordat u een beheerde tag verwijdert, moet u ervoor zorgen dat er geen ABAC-beleid ernaar verwijst.

Als u de fout wilt oplossen, herstelt u de verwijderde tag of werkt u het beleid bij of verwijdert u het beleid dat ernaar verwijst. Zie Beheerde tags maken en beheren.

Een kolom verwijderen die is gelabeld

Azure Databricks voorkomt het verwijderen van een kolom waarop een beheerde tag is toegepast. Als u de kolom wilt verwijderen, moet een gebruiker met ASSIGN de tag en APPLY TAG op het object eerst de tag verwijderen en vervolgens kan de kolom worden verwijderd.

Dit is relevant voor declaratieve pijplijnen en andere geautomatiseerde werkstromen die tabelschema's wijzigen. Als een pijplijn probeert een gelabelde kolom te verwijderen, mislukt de bewerking. Als u de blokkering van de pijplijn wilt opheffen, moet een gebruiker met de vereiste tagmachtigingen de tag verwijderen, de pijplijn uitvoeren zodat de schemawijziging slaagt en de tag vervolgens opnieuw toepassen op de relevante kolommen. Als de tag niet opnieuw wordt toegepast, mislukken query's op de gegevens omdat het beleid nog steeds binnen het bereik valt, maar de verwachte tag niet meer op het object staat.

Verwijdering van functie waarnaar wordt verwezen door beleid

Als een UDF waarnaar wordt verwezen door een beleid wordt verwijderd terwijl het beleid nog steeds binnen het bereik valt, mislukken query's op tabellen in dat bereik met UC_DEPENDENCY_DOES_NOT_EXIST. U kunt dit oplossen door de functie te herstellen of het beleid bij te werken om te verwijzen naar een andere UDF.

Regels voor meerdere filters en maskers

Er kan slechts één afzonderlijk rijfilter worden toegepast tijdens de query voor een bepaalde tabel en gebruiker. Op dezelfde manier kan slechts één afzonderlijk kolommasker per kolom tijdens uitvoeringstijd worden toegepast voor een bepaalde kolom en gebruiker. Dit voorkomt dubbelzinnige resultaten.

Als meerdere afzonderlijke filters of maskers van toepassing zijn op dezelfde gebruiker en tabel (of kolom), blokkeert Azure Databricks de toegang en retourneert een fout. Voorbeeld:

  • Een filter of masker op tabelniveau conflicteert met een ABAC-beleid. Een tabel of kolom met een handmatig toegepast rijfilter of kolommasker conflicteert met een ABAC-gedefinieerd filter of masker op hetzelfde doel.
  • De component van USING COLUMNS een rijfilter verwijst naar een MATCH COLUMNS alias die overeenkomt met meerdere kolommen. De USING COLUMNS component geeft kolomwaarden door aan de UDF. Als een MATCH COLUMNS alias in de USING COLUMNS component overeenkomt met meer dan één kolom, kan de engine niet bepalen welke kolom moet worden doorgegeven aan de UDF en mislukt de query met een fout.
  • Er wordt naar een gemaskeerde kolom verwezen in de USING COLUMNS component van een ander beleid. Als een kolom wordt gemaskeerd door één beleid, kan deze niet worden gebruikt als invoerargument in de USING COLUMNS component van een ander beleid.

Meerdere ABAC-beleidsregels kunnen naast elkaar bestaan voor dezelfde tabel of kolom als ze resulteren in hetzelfde effectieve filter of masker. Twee beleidsregels die verwijzen naar dezelfde UDF met dezelfde argumenten, worden bijvoorbeeld omgezet in hetzelfde filter of masker en conflicteren niet.

Beleidsconflicten oplossen

Wanneer Azure Databricks meerdere afzonderlijke filters of maskers detecteert tijdens de beleidsevaluatie voor een bepaalde gebruiker, genereert deze een fout INVALID_PARAMETER_VALUE.UC_ABAC_MULTIPLE_ROW_FILTERS of COLUMN_MASKS_FEATURE_NOT_SUPPORTED.MULTIPLE_MASKS en blokkeert de toegang tot de tabel totdat het conflict is opgelost.

Diagnose en oplossing:

  1. Gebruik SHOW EFFECTIVE POLICIES dit om alle beleidsregels weer te geven die van toepassing zijn op de tabel.
  2. Controleer INFORMATION_SCHEMA.ROW_FILTERS en INFORMATION_SCHEMA.COLUMN_MASKS identificeer eventuele rijfilters op tabelniveau of kolommaskers die mogelijk conflicteren.
  3. Controleer welke beleidsregels elkaar overlappen in hun TO/EXCEPT principalen en WHEN/MATCH COLUMNS voorwaarden.
  4. Oplossen door:
    • Beleidsvoorwaarden verfijnen. Werk WHEN of MATCH COLUMNS clausules bij om specifieker te zijn, zodat verschillend beleid gericht is op aparte tabellen of kolommen.
    • Beheerde tags aanpassen. Controleer tagtoewijzingen op kolommen of tabellen die onbedoelde beleidsovereenkomsten activeren en verwijder of werk ze bij.
    • Principes aanpassen. Werk bij TO/EXCEPT zodat elke gebruiker wordt gedekt door maximaal één beleid per tabel (voor rijfilters) of per kolom (voor kolommaskers).
    • Herstructureringsbeleid. Voeg overlappende beleidsregels samen in één beleid of splits brede beleidsregels in afzonderlijke, expliciet gerichte beleidsregels.

Automatische typecasting voor kolommaskers

Azure Databricks zet zowel de invoer- als de uitvoer van kolommaskerfuncties automatisch om die zijn afgeleid van ABAC-beleidsregels. De waarde van de invoerkolom wordt gecast zodat deze overeenkomt met het parametertype van de maskerfunctie en de functie-uitvoer wordt gecast zodat deze overeenkomt met het gegevenstype van de doelkolom. Dit zorgt voor typeconsistentie en betrouwbaar querygedrag bij het maskeren van kolommen. Automatisch casten werkt als volgt:

  1. Uitvoering van maskeringsfunctie: wanneer beleidsevaluatie bepaalt dat maskering van toepassing is, wordt de maskeringsfunctie uitgevoerd op de overeenkomende kolomwaarden.
  2. Automatic type casting: Azure Databricks cast de invoerkolomwaarde zodat deze overeenkomt met het parametertype van de functie en cast de functie-uitvoer zodat deze overeenkomt met het gegevenstype van de doelkolom.
  3. Resultaat geretourneerd: het correct getypte resultaat wordt geretourneerd aan de query.

Als de invoer- of uitvoertypen niet compatibel zijn, mislukt de cast en retourneert de query een runtimefout. Casting volgt ANSI SQL-standaarden voor CAST bewerkingen (volledige compatibiliteitsdetails), met één toevoeging: in Databricks Runtime 18.1 en hoger kan het ABAC-kolommaskerbeleid structs omzetten naar VARIANT, wat in algemene SQL niet wordt ondersteund.

U moet ervoor zorgen dat maskerfuncties typen retourneren die compatibel zijn met doelkolommen. Zie cast-compatibele maskeringsfuncties voor voorbeelden en de VARIANT-benadering voor flexibele maskering in kolomtypen.