Gegevensobjectmachtigingen

Met Azure Databricks model voor gegevensbeheer kunt u programmatisch toegang tot uw gegevens verlenen, weigeren en intrekken vanuit Spark SQL. Met dit model kunt u de toegang beheren tot bewaarde objecten, zoals catalogi, databases, tabellen, weergaven en functies. Het maakt ook fijnf mogelijk toegangsbeheer (bijvoorbeeld voor een bepaalde subset van een tabel) door bevoegdheden in te stellen voor afgeleide weergaven die zijn gemaakt op basis van willekeurige query's. De Azure Databricks SQL query analyzer dwingt dit beleid voor toegangsbeheer tijdens runtime af op Azure Databricks-clusters met toegangsbeheer voor tabel ingeschakeld en alle SQL eindpunten.

In dit artikel worden de bevoegdheden, objecten en eigendomsregels beschreven die Azure Databricks gegevensbeheermodel. Ook wordt beschreven hoe u objectbevoegdheden verleent, weigert en intrekken.

Vereisten

De vereisten voor het beheren van objectbevoegdheden zijn afhankelijk van uw omgeving:

Databricks Data Science & Engineering en Databricks Machine Learning

Databricks SQL

Zie Vereisten voor de snelstart voor beheerders.

Model voor gegevensbeheer

In deze sectie wordt het Azure Databricks gegevensbeheermodel beschreven. De toegang tot beeerbare gegevensobjecten wordt bepaald door bevoegdheden.

Beeerbare objecten

De beeerbare objecten zijn:

  • CATALOG: bepaalt de toegang tot de volledige gegevenscatalogus.

    • DATABASE: bepaalt de toegang tot een database.
      • TABLE: bepaalt de toegang tot een beheerde of externe tabel.
      • VIEW: bepaalt de toegang tot SQL weergaven.
      • FUNCTION: bepaalt de toegang tot een benoemde functie.
  • ANONYMOUS FUNCTION: beheert de toegang tot ANONYMOUS FUNCTION.

    Notitie

    FUNCTION- ANONYMOUS FUNCTION en -objecten worden niet ondersteund in Databricks SQL.

  • ANY FILE: bepaalt de toegang tot het onderliggende bestandssysteem.

    Waarschuwing

    Gebruikers met toegang tot kunnen de beperkingen voor de catalogus, databases, tabellen en weergaven omzeilen door rechtstreeks ANY FILE vanuit het bestandssysteem te lezen.

Bevoegdheden

  • SELECT: geeft leestoegang tot een object.
  • CREATE: biedt de mogelijkheid om een object te maken (bijvoorbeeld een tabel in een database).
  • MODIFY: biedt de mogelijkheid om gegevens toe te voegen, te verwijderen en te wijzigen van of naar een object.
  • USAGE: biedt geen mogelijkheden, maar is een extra vereiste om een actie uit te voeren op een databaseobject.
  • READ_METADATA: biedt de mogelijkheid om een object en de metagegevens ervan weer te geven.
  • CREATE_NAMED_FUNCTION: biedt de mogelijkheid om een benoemde UDF te maken in een bestaande catalogus of database.
  • MODIFY_CLASSPATH: biedt de mogelijkheid om bestanden toe te voegen aan het spark-klassepad.
  • ALL PRIVILEGES: geeft alle bevoegdheden (wordt omgezet in alle bovenstaande bevoegdheden).

Notitie

CREATE_NAMED_FUNCTION- MODIFY_CLASSPATH en -bevoegdheden worden niet ondersteund in Databricks SQL.

USAGE Voorrecht

Als u een actie wilt uitvoeren op een databaseobject, moet een gebruiker de bevoegdheid voor die database hebben naast de bevoegdheid om USAGE die actie uit te voeren. Elk van de volgende opties voldoet aan de USAGE vereiste:

  • Beheerder zijn
  • De bevoegdheid USAGE hebben voor de database of zich in een groep met de bevoegdheid voor de USAGE database
  • De bevoegdheid USAGE hebben voor de of zich in een groep met de CATALOG bevoegdheid USAGE
  • De eigenaar van de database zijn of deel uit maken van een groep die eigenaar is van de database

Zelfs de eigenaar van een object in een database moet de bevoegdheid USAGE hebben om het te kunnen gebruiken.

Een beheerder kan bijvoorbeeld een groep en een database definiëren financeaccounting die ze kunnen gebruiken. Als u een database wilt instellen die alleen het financiële team kan gebruiken en delen, doet een beheerder het volgende:

CREATE DATABASE accounting;
GRANT USAGE ON DATABASE accounting TO finance;
GRANT CREATE ON DATABASE accounting TO finance;

Met deze bevoegdheden kunnen leden van de finance groep tabellen en weergaven maken in de accounting database. maar kan deze tabellen of weergaven niet delen met een principal die geen op USAGE de accounting database heeft.

Databricks Data Science & Engineering en Databricks Runtime versiegedrag
  • Clusters met Databricks Runtime 7.3 LTS en hoger dwingen de bevoegdheid USAGE af.
  • Clusters met Databricks Runtime 7.2 en lager dwingen de bevoegdheid niet USAGE af.
  • Om ervoor te zorgen dat bestaande workloads ongewijzigd blijven, hebben in werkruimten die voor de introductie van toegangsbeheer voor de tabel werden gebruikt, de bevoegdheid verleend USAGEUSAGE aan de CATALOGusers groep. Als u wilt profiteren van de bevoegdheid, moet USAGE u uitvoeren en REVOKE USAGE ON CATALOG FROM usersGRANT USAGE ... vervolgens, indien nodig.

Bevoegdhedenhiërarchie

Wanneer toegangsbeheer voor tabel is ingeschakeld in de werkruimte en op alle clusters, SQL objecten in Azure Databricks hiërarchisch en worden bevoegdheden omlaag overgenomen. Dit betekent dat het verlenen of weigeren van een bevoegdheid op de automatisch de bevoegdheid verleent of weigert CATALOG aan alle databases in de catalogus. Op dezelfde manier worden bevoegdheden die voor DATABASE een object worden verleend, overgenomen door alle objecten in die database. Dit patroon geldt voor alle beeerbare objecten.

Als u gebruikersbevoegdheden voor een tabel weigert, kan de gebruiker de tabel niet zien door alle tabellen in de database weer te geven. Als u gebruikersbevoegdheden voor een database weigert, kan de gebruiker niet zien dat de database bestaat door alle databases in de catalogus weer te geven.

Eigendom van objecten

Wanneer toegangsbeheer voor de tabel is ingeschakeld op een cluster of SQL eindpunt, een gebruiker die een database, tabel, weergave of functie maakt wordt de eigenaar. De eigenaar krijgt alle bevoegdheden en kan machtigingen verlenen aan andere gebruikers.

Groepen kunnen eigenaar zijn van objecten. In dat geval worden alle leden van die groep beschouwd als eigenaar.

Eigendom bepaalt of u machtigingen voor afgeleide objecten aan andere gebruikers kunt verlenen. Stel bijvoorbeeld dat gebruiker A eigenaar is van tabel T en gebruiker B bevoegdheden SELECT verleent voor tabel T. Zelfs hoewel gebruiker B een keuze kan maken uit tabel T, kan gebruiker B geen bevoegdheden voor tabel T verlenen SELECT aan gebruiker C, omdat gebruiker A nog steeds de eigenaar is van de onderliggende tabel T. Bovendien kan gebruiker B deze niet omzeilen deze beperking gewoon door een weergave-V te maken in tabel T en bevoegdheden voor SELECT verlenen aan gebruiker C. Wanneer Azure Databricks controleert op bevoegdheden voor gebruiker C voor toegang tot weergave V, wordt ook gecontroleerd of de eigenaar van V en onderliggende tabel T zijn hetzelfde. Als de eigenaren niet hetzelfde zijn, moet gebruiker C heeft ook SELECT bevoegdheden voor onderliggende tabel T.

Wanneer toegangsbeheer voor de tabel is uitgeschakeld op een cluster, wordt er geen eigenaar geregistreerd wanneer een database, tabel, weergave, de functie or wordt gemaakt. Voer uit om te testen of een object een eigenaar SHOW GRANT ON <object-name> heeft. Als u geen vermelding ziet met ActionType OWN , heeft het object geen eigenaar.

Eigenaar toewijzen aan object

De eigenaar van een object of een beheerder kan het eigendom van een object overdragen met de ALTER <object> OWNER TO `<user-name>@<user-domain>.com` opdracht :

ALTER DATABASE <database-name> OWNER TO `<user-name>@<user-domain>.com`
ALTER TABLE <table-name> OWNER TO `group_name`
ALTER VIEW <view-name> OWNER TO `<user-name>@<user-domain>.com`

Gebruikers en groepen

Beheerders en eigenaren kunnen bevoegdheden verlenen aan gebruikers en groepen. Elke gebruiker wordt uniek aangeduid met de gebruikersnaam in Azure Databricks (die doorgaans is toe te kennen aan zijn of haar e-mailadres). Alle gebruikers maken impliciet deel uit van de groep Alle gebruikers, weergegeven als users in SQL.

Notitie

U moet gebruikersspecificaties tussen backticks ( ` ` ) plaatsen, niet tussen enkele aanhalingstekens ( ' ' ).

Bewerkingen en bevoegdheden

In Azure Databricks kunnen gebruikers met beheerdersrechten alle objectbevoegdheden beheren, in de meeste geval alle bevoegdheden voor alle beeerbare objecten krijgen en de eigenaar van elk object wijzigen. Eigenaren van een object kunnen elke actie uitvoeren op dat object, kunnen bevoegdheden voor dat object verlenen aan andere principals en het eigendom van het object overdragen aan een andere principal. De enige limiet voor de bevoegdheden van een eigenaar is voor objecten in een database; om te communiceren met een object in een database moet de gebruiker ook USAGE over die database hebben.

In de volgende tabel worden SQL aan de bevoegdheden die nodig zijn om die bewerking uit te voeren.

Notitie

  • Een plaats waar een bevoegdheid voor een tabel, weergave of functie is vereist, is ook vereist voor de USAGE database waarin deze zich in.
  • Op elke plaats waar in een opdracht naar een tabel wordt verwezen, kan ook naar een pad worden verwezen. In deze gevallen is of vereist op in plaats van SELECT op de database en een andere bevoegdheid voor de MODIFYANY FILEUSAGE tabel.
  • Objecteigendom wordt hier weergegeven als de OWN bevoegdheid.
Bewerking Vereiste bevoegdheden
CLONE Mogelijkheid om SELECT vanuit de tabel te komen die wordt gekloond, in de database en of de tabel wordt CREATEMODIFY vervangen.
COPY INTO SELECT op ANY FILE als u vanaf een pad kopieert, in de tabel die naar wordt MODIFY gekopieerd.
CREATE BLOOMFILTER INDEX OWN in de tabel die wordt geïndexeerd.
CREATE DATABASE CREATE op de CATALOG .
CREATE TABLE Of OWN beide en in de USAGECREATE database.
CREATE VIEW Of OWN beide en in de USAGECREATE database.
CREATE FUNCTION (extern) Of OWN en in de USAGECREATE_NAMED_FUNCTION database. Als een resource is opgegeven, is MODIFY_CLASSPATH ook CATALOG aan vereist.
CREATE FUNCTION (SQL) Of OWN en in de USAGECREATE_NAMED_FUNCTION database. Als een resource is opgegeven, is MODIFY_CLASSPATH ook CATALOG aan vereist.
ALTER DATABASE OWN in de database.
ALTER TABLE Meestal OWN in de tabel. WIJZIGEN als u alleen partities toevoegt of verwijdert.
ALTER VIEW OWN in de weergave.
DROP BLOOMFILTER INDEX OWN in de tabel.
DROP DATABASE OWN in de database.
DROP TABLE OWN in de tabel.
DROP VIEW OWN in de weergave.
DROP FUNCTION OWN op de functie .
EXPLAIN READ_METADATA in de tabellen en weergaven.
DESCRIBE TABLE READ_METADATA in de tabel.
DESCRIBE HISTORY OWN in de tabel.
SELECT SELECT in de tabel.
INSERT MODIFY in de tabel.
TABEL HERSTELLEN MODIFY in de tabel.
UPDATE MODIFY in de tabel.
MERGE INTO MODIFY in de tabel.
DELETE FROM MODIFY in de tabel.
TRUNCATE TABLE MODIFY in de tabel.
OPTIMIZE MODIFY in de tabel.
VACUUM MODIFY in de tabel.
FSCK REPAIR TABLE MODIFY in de tabel.
MSCK OWN in de tabel.
GRANT OWN op het -object.
SHOW GRANT OWN op het -object of de gebruiker die aan de toekenning is onderworpen.
DENY OWN op het -object.
REVOKE OWN op het -object.

Belangrijk

Wanneer u toegangsbeheer voor tabel gebruikt, DROP TABLE zijn instructies casegevoelig. Als een tabelnaam kleineletters heeft en de verwijst naar de tabelnaam met gemengde of DROP TABLE hoofdletters, mislukt DROP TABLE de instructie.

Objectbevoegdheden beheren

U gebruikt de GRANT bewerkingen , , , en om DENYREVOKEMSCKSHOW GRANT objectbevoegdheden te beheren.

Notitie

  • Een eigenaar of beheerder van een object kan bewerkingen GRANT , DENY , en REVOKESHOW GRANT uitvoeren. Een beheerder kan echter geen bevoegdheden van een eigenaar weigeren of intrekken.

  • Een principal die geen eigenaar of beheerder is, kan een bewerking alleen uitvoeren als de vereiste bevoegdheid is verleend.

  • Als u een bevoegdheid voor alle gebruikers wilt verlenen, weigeren of intrekken, geeft u het trefwoord op na TO . Bijvoorbeeld:

    GRANT SELECT ON ANY FILE TO users
    

Voorbeelden

GRANT SELECT ON DATABASE <database-name> TO `<user>@<domain-name>`
GRANT SELECT ON ANONYMOUS FUNCTION TO `<user>@<domain-name>`
GRANT SELECT ON ANY FILE TO `<user>@<domain-name>`

SHOW GRANT `<user>@<domain-name>` ON DATABASE <database-name>

DENY SELECT ON <table-name> TO `<user>@<domain-name>`

REVOKE ALL PRIVILEGES ON DATABASE default FROM `<user>@<domain-name>`
REVOKE SELECT ON <table-name> FROM `<user>@<domain-name>`

GRANT SELECT ON ANY FILE TO users

Dynamische weergavefuncties

Azure Databricks bevat twee gebruikersfuncties waarmee u dynamisch machtigingen op kolom- en rijniveau kunt uitdrukken in de body van een weergavedefinitie.

  • current_user(): de huidige gebruikersnaam retourneren.
  • is_member(): bepalen of de huidige gebruiker lid is van een specifieke Azure Databricks is_member().

Notitie

Beschikbaar in Databricks Runtime 7.3 LTS en hoger. Als u deze functies echter wilt gebruiken in Databricks Runtime 7.3 LTS, moet u de Spark-configuratie instellen.

Kijk eens naar het volgende voorbeeld, waarin beide functies worden gecombineerd om te bepalen of een gebruiker het juiste groepslidmaatschap heeft:

-- Return: true if the user is a member and false if they are not
SELECT
  current_user as user,
-- Check to see if the current user is a member of the "Managers" group.
  is_member("Managers") as admin

Beheerders in staat stellen om binnen één weergave gedetailleerde bevoegdheden in te stellen voor meerdere gebruikers en groepen, is zowel expressief als krachtig, en bespaart tegelijkertijd op beheeroverhead.

Machtigingen op kolomniveau

Met dynamische weergaven kunt u eenvoudig beperken welke kolommen een specifieke groep of gebruiker kan zien. Bekijk het volgende voorbeeld, waarbij alleen gebruikers die deel uitmaken van de auditors groep e-mailadressen uit de tabel kunnen sales_raw zien. Tijdens de analyse vervangt Spark de CASE instructie door de letterlijke of de kolom 'REDACTED'email . Dit gedrag maakt alle gebruikelijke prestatieoptimalisaties van Spark mogelijk.

-- Alias the field 'email' to itself (as 'email') to prevent the
-- permission logic from showing up directly in the column name results.
CREATE VIEW sales_redacted AS
SELECT
  user_id,
  CASE WHEN
    is_member('auditors') THEN email
    ELSE 'REDACTED'
  END AS email,
  country,
  product,
  total
FROM sales_raw

Machtigingen op rijniveau

Met dynamische weergaven kunt u machtigingen opgeven tot het niveau van de rij of het veld. Bekijk het volgende voorbeeld, waarbij alleen gebruikers die deel uitmaken van de groep transactiebedragen (kolom) kunnen zien die groter zijn dan managerstotal $ 1.000.000,00:

CREATE VIEW sales_redacted AS
SELECT
  user_id,
  country,
  product,
  total
FROM sales_raw
WHERE
  CASE
    WHEN is_member('managers') THEN TRUE
    ELSE total <= 1000000
  END;

Gegevensmaskering

Zoals u in de voorgaande voorbeelden kunt zien, kunt u maskering op kolomniveau implementeren om te voorkomen dat gebruikers specifieke kolomgegevens zien, tenzij ze zich in de juiste groep. Omdat deze weergaven standaard Spark-SQL, kunt u geavanceerdere maskeringstypen met complexere SQL expressies. In het volgende voorbeeld kunnen alle gebruikers analyses uitvoeren op e-maildomeinen, maar kunnen leden van de groep de volledige e-mailadressen van auditors de gebruikers zien.

-- The regexp_extract function takes an email address such as
-- user.x.lastname@example.com and extracts 'example', allowing
-- analysts to query the domain name

CREATE VIEW sales_redacted AS
SELECT
  user_id,
  region,
  CASE
    WHEN is_member('auditors') THEN email
    ELSE regexp_extract(email, '^.*@(.*)$', 1)
  END
  FROM sales_raw

Veelgestelde vragen

Hoe kan ik toegangsrechten verlenen, weigeren of intrekken voor alle gebruikers?

Geef het users trefwoord op na of TOFROM . Bijvoorbeeld:

GRANT SELECT ON TABLE database.table TO users

Ik heb een object gemaakt, maar nu kan ik het niet meer opvragen, neerzetten of wijzigen.

Deze fout kan optreden omdat u dat object hebt gemaakt op een cluster of SQL eindpunt zonder dat toegangsbeheer voor tabel is ingeschakeld. Wanneer toegangsbeheer voor tabel is uitgeschakeld op een cluster of SQL eindpunt, eigenaren worden niet geregistreerd wanneer een database, tabel of weergave is Gemaakt. Een beheerder moet een eigenaar toewijzen aan het object met behulp van de volgende opdracht:

ALTER [DATABASE | TABLE | VIEW] <object-name> OWNER TO `<user-name>@<user-domain>.com`;

Hoe kan ik bevoegdheden verlenen voor algemene en lokale tijdelijke weergaven?

Bevoegdheden voor algemene en lokale tijdelijke weergaven worden niet ondersteund. Lokaal tijdelijk weergaven zijn alleen zichtbaar binnen dezelfde sessie en weergaven die zijn gemaakt in de global_temp database zijn zichtbaar voor alle gebruikers die een cluster of SQL delen. Bevoegdheden voor de onderliggende tabellen en weergaven er wordt naar verwezen door tijdelijke weergaven.

Hoe kan ik gebruiker of groep bevoegdheden verlenen voor meerdere tabellen tegelijk?

Een instructie voor verlenen, weigeren of intrekken kan op slechts één object tegelijk worden toegepast. De aanbevolen manier het organiseren en verlenen van bevoegdheden voor meerdere tabellen aan een principal gebeurt via databases. Een verlenen SELECT principal-bevoegdheid voor een database verleent impliciet die SELECT principal-bevoegdheden voor alle tabellen en weergaven in die database. Bijvoorbeeld als een database D tabellen t1 en t2 bevat, en een de beheerder geeft de volgende GRANT opdracht uit:

GRANT USAGE, SELECT ON DATABASE D TO `<user>@<domain-name>`

De principal <user>@<domain-name> kan kiezen uit tabellen t1 en t2, evenals tabellen en weergaven die in de toekomst in database D worden gemaakt.

Hoe kan ik een gebruiker bevoegdheden verlenen voor alle tabellen, met uitzondering van één?

U SELECT verleent bevoegdheden aan de database en weigert vervolgens bevoegdheden voor de SELECT specifieke tabel waar u de toegang tot wilt beperken.

GRANT USAGE, SELECT ON DATABASE D TO `<user>@<domain-name>`
DENY SELECT ON TABLE D.T TO `<user>@<domain-name>`

De principal <user>@<domain-name> kan een keuze maken uit alle tabellen in D, met uitzondering van D.T.

Een gebruiker heeft bevoegdheden voor een weergave van tabel T, maar wanneer die gebruiker vanuit die weergave probeert SELECTSELECT te komen, wordt de fout User does not have privilege SELECT on table weergegeven.

Deze veelvoorkomende fout kan een van de volgende oorzaken hebben:

  • Tabel T heeft geen geregistreerde eigenaar omdat deze is gemaakt met behulp van een cluster of SQL eindpunt waarvoor toegangsbeheer voor tabel is uitgeschakeld.
  • De toekenning van de bevoegdheid voor een weergave van tabel T is niet de eigenaar van tabel T of de gebruiker heeft ook geen SELECTSELECT select-bevoegdheid voor tabel T.

Stel dat er een tabel T is die eigendom is van A. Een weergave die eigenaar is van V1 op T en B is eigenaar van weergave V2 op T.

  • Een gebruiker kan V1 selecteren wanneer A bevoegdheden heeft SELECT verleend voor weergave V1.
  • Een gebruiker kan selecteren op V2 wanneer A bevoegdheden heeft verleend voor tabel T en B bevoegdheden SELECTSELECT heeft verleend voor V2.

Zoals beschreven in de sectie Objecteigendom zorgen deze voorwaarden ervoor dat alleen de eigenaar van een object andere gebruikers toegang kan verlenen tot dat object.

Ik heb geprobeerd om uit te sc.parallelize voeren op een cluster met toegangsbeheer voor tabel ingeschakeld. Dit mislukt.

Op clusters met toegangsbeheer voor tabel is ingeschakeld, kunt u alleen de Api's voor Spark SQL en Python DataFrame gebruiken. De RDD API is uit veiligheidsoverwegingen niet toegestaan, omdat Azure Databricks niet de mogelijkheid heeft om te inspecteren en code binnen een RDD autor maken.