Hive-metastore-bevoegdheden en beveiligbare objecten (verouderd)

In dit artikel wordt het bevoegdheidsmodel beschreven voor de verouderde Azure Databricks Hive-metastore, die is ingebouwd in elke Azure Databricks-werkruimte. Ook wordt beschreven hoe u bevoegdheden voor objecten in de ingebouwde Hive-metastore kunt verlenen, weigeren en intrekken. Unity Catalog maakt gebruik van een ander model voor het verlenen van bevoegdheden. Zie Unity Catalog-bevoegdheden en beveiligbare objecten.

Notitie

Toegangsbeheer voor tabellen voor gegevens die worden beheerd door de Hive-metastore is een verouderd model voor gegevensbeheer. Databricks raadt u aan de tabellen die worden beheerd door de Hive-metastore te upgraden naar de Unity Catalog-metastore. Unity Catalog vereenvoudigt de beveiliging en governance van uw gegevens door een centrale plaats te bieden voor het beheren en controleren van toegang tot gegevens in meerdere werkruimten in uw account. Zie Werken met Unity Catalog en de verouderde Hive-metastore voor meer informatie over hoe het verouderde privilegemodel verschilt van het privilegemodel voor Unity Catalog.

Vereisten

  • Een beheerder moet toegangsbeheer voor tabellen inschakelen en afdwingen voor de werkruimte.
  • Het cluster moet zijn ingeschakeld voor toegangsbeheer voor tabellen.

Notitie

  • Gegevenstoegangsbeheer is altijd ingeschakeld in Databricks SQL, zelfs als toegangsbeheer voor tabellen niet is ingeschakeld voor de werkruimte.
  • Als toegangsbeheer voor tabellen is ingeschakeld voor de werkruimte en u al ACL's (verleende en geweigerde bevoegdheden) in de werkruimte hebt opgegeven, worden deze ACL's in Databricks SQL gerespecteerd.

Bevoegdheden voor objecten in de Hive-metastore beheren

Bevoegdheden voor gegevensobjecten die worden beheerd door de Hive-metastore kunnen worden verleend door een werkruimtebeheerder of de eigenaar van een object. U kunt bevoegdheden voor Hive-metastore-objecten beheren met behulp van SQL-opdrachten.

Als u bevoegdheden in SQL wilt beheren, gebruikt u de instructies GRANT, REVOKE, DENY, MSCK en SHOW GRANTS in een notebook of de Databricks SQL-query-editor met behulp van de syntaxis:

GRANT privilege_type ON securable_object TO principal

Hierin:

Als u een bevoegdheid wilt verlenen aan alle gebruikers in uw werkruimte, verleent u de bevoegdheid aan de users groep. Voorbeeld:

GRANT SELECT ON TABLE <schema-name>.<table-name> TO users

Zie Bevoegdheden en beveiligbare objecten in de Hive-metastore voor meer informatie over het beheren van bevoegdheden voor objecten in de Hive-metastore met behulp van SQL-opdrachten.

U kunt ook toegangsbeheer voor tabellen beheren in een volledig geautomatiseerde installatie met behulp van de Databricks Terraform-provider en databricks_sql_permissions.

Eigendom van objecten

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

Groepen kunnen eigenaar zijn van objecten, in welk geval alle leden van die groep worden beschouwd als eigenaren.

De eigenaar van een object of een werkruimtebeheerder kan het eigendom van een object overdragen met behulp van de volgende opdracht:

ALTER <object> OWNER TO `<user-name>@<user-domain>.com`

Notitie

Wanneer toegangsbeheer voor tabellen is uitgeschakeld in een cluster of SQL Warehouse, worden eigenaren niet geregistreerd wanneer een schema, tabel of weergave wordt gemaakt. Een werkruimtebeheerder moet een eigenaar aan het object toewijzen met behulp van de ALTER <object> OWNER TO opdracht.

Beveiligbare objecten in de Hive-metastore

De beveiligbare objecten zijn:

  • CATALOG: beheert de toegang tot de volledige gegevenscatalogus.

    • SCHEMA: bepaalt de toegang tot een schema.
      • TABLE: beheert de toegang tot een beheerde of externe tabel.
      • VIEW: beheert de toegang tot SQL-weergaven.
      • FUNCTION: bepaalt de toegang tot een benoemde functie.
  • ANONYMOUS FUNCTION: beheert de toegang tot anonieme of tijdelijke functies.

    Notitie

    ANONYMOUS FUNCTION objecten worden niet ondersteund in Databricks SQL.

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

    Waarschuwing

    Gebruikers die toegang hebben verleend, ANY FILE kunnen de beperkingen voor de catalogus, schema's, tabellen en weergaven omzeilen door rechtstreeks vanuit het bestandssysteem te lezen.

Notitie

Bevoegdheden voor globale en lokale tijdelijke weergaven worden niet ondersteund. Lokale tijdelijke weergaven zijn alleen zichtbaar binnen dezelfde sessie en weergaven die in het global_temp schema zijn gemaakt, zijn zichtbaar voor alle gebruikers die een cluster of SQL Warehouse delen. Bevoegdheden voor de onderliggende tabellen en weergaven waarnaar wordt verwezen door tijdelijke weergaven, worden echter afgedwongen.

Bevoegdheden die u kunt verlenen aan Hive-metastore-objecten

  • SELECT: geeft leestoegang tot een object.
  • CREATE: biedt de mogelijkheid om een object te maken (bijvoorbeeld een tabel in een schema).
  • MODIFY: biedt de mogelijkheid om gegevens aan of uit een object toe te voegen, te verwijderen en te wijzigen.
  • USAGE: biedt geen mogelijkheden, maar is een extra vereiste om een actie uit te voeren op een schemaobject.
  • READ_METADATA: biedt de mogelijkheid om een object en de bijbehorende metagegevens weer te geven.
  • CREATE_NAMED_FUNCTION: biedt de mogelijkheid om een benoemde UDF te maken in een bestaande catalogus of schema.
  • 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

De MODIFY_CLASSPATH bevoegdheid wordt niet ondersteund in Databricks SQL.

USAGE Voorrecht

Als u een actie wilt uitvoeren op een schemaobject in de Hive-metastore, moet een gebruiker de USAGE bevoegdheid voor dat schema hebben, naast de bevoegdheid om die actie uit te voeren. Een van de volgende voldoet aan de USAGE vereiste:

  • Een werkruimtebeheerder zijn
  • USAGE De bevoegdheid voor het schema hebben of zich in een groep bevinden met de USAGE bevoegdheid voor het schema
  • USAGE De bevoegdheid hebben voor de CATALOG groep of in een groep met de USAGE bevoegdheid
  • De eigenaar van het schema zijn of zich in een groep bevinden die eigenaar is van het schema

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

Bevoegdheidshiërarchie

Wanneer toegangsbeheer voor tabellen is ingeschakeld voor de werkruimte en op alle clusters, zijn SQL-objecten in Azure Databricks hiërarchisch en worden bevoegdheden naar beneden overgenomen. Dit betekent dat het verlenen of weigeren van een bevoegdheid voor de CATALOG automatisch verlenen of weigeren van de bevoegdheid voor alle schema's in de catalogus. Op dezelfde manier worden bevoegdheden die zijn verleend voor een schemaobject overgenomen door alle objecten in dat schema. Dit patroon geldt voor alle beveiligbare objecten.

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

Dynamische weergavefuncties

Azure Databricks bevat twee gebruikersfuncties waarmee u dynamisch machtigingen op kolom- en rijniveau kunt uitdrukken in de hoofdtekst van een weergavedefinitie die wordt beheerd door de Hive-metastore.

  • current_user(): retourneert de huidige gebruikersnaam.
  • is_member(): bepaal of de huidige gebruiker lid is van een specifieke Azure Databricks-groep op werkruimteniveau.

In het volgende voorbeeld worden beide functies 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

Machtigingen op kolomniveau

U kunt dynamische weergaven gebruiken om de kolommen te beperken die 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 sales_raw tabel kunnen zien. Tijdens de analyse vervangt Spark de CASE instructie door de letterlijke 'REDACTED' of de kolom email. Dit gedrag biedt alle gebruikelijke prestatieoptimalisaties van Spark.

-- 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_group_member('auditors') THEN email
    ELSE 'REDACTED'
  END AS email,
  country,
  product,
  total
FROM sales_raw

Machtigingen op rijniveau

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

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

Gegevensmaskering

Zoals in de voorgaande voorbeelden wordt weergegeven, kunt u maskering op kolomniveau implementeren om te voorkomen dat gebruikers specifieke kolomgegevens zien, tenzij ze zich in de juiste groep bevinden. Omdat deze weergaven standaard Spark SQL zijn, kunt u geavanceerdere typen maskering uitvoeren 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 gebruikers auditors 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_group_member('auditors') THEN email
    ELSE regexp_extract(email, '^.*@(.*)$', 1)
  END
  FROM sales_raw