Freigeben über


Abgestimmte Berechtigungen auf dediziertem Compute

Mit feingranularer Zugriffssteuerung können Sie den Zugriff auf bestimmte Daten mithilfe von Ansichten, Zeilenfiltern und Spaltenmasken einschränken. Auf dieser Seite wird erläutert, wie serverlose Berechnungsdienste verwendet werden, um differenzierte Zugriffssteuerungen für dedizierte Computressourcen zu erzwingen.

Hinweis

Dedicated Compute ist universell oder Auftrags-Compute, konfiguriert mit Dedicated-Zugriffsmodus (früher Einzelbenutzermodus). Weitere Informationen finden Sie unter Zugriffsmodi.

Anforderungen

Um dediziertes Compute zu nutzen, um eine Sicht oder Tabelle mit feinkörnigen Zugriffssteuerungen abzufragen:

Wenn Ihre dedizierte Computeressource und Ihr Arbeitsbereich diese Anforderungen erfüllen, wird die Datenfilterung automatisch ausgeführt.

Funktionsweise der Datenfilterung auf dediziertem Compute

Wenn eine Abfrage auf ein Datenbankobjekt mit differenzierten Zugriffssteuerungen zugreift, übergibt die dedizierte Computeressource die Abfrage an die serverlose Berechnung Ihres Arbeitsbereichs, um die Datenfilterung auszuführen. Die gefilterten Daten werden dann mithilfe temporärer Dateien auf arbeitsbereichsinternem Cloudspeicher zwischen serverloser und dedizierter Berechnung übertragen.

Diese Funktionalität gilt für die folgenden Datenbankobjekte:

Im folgenden Diagramm verfügt ein Benutzer über die SELECT Berechtigung für table_1, view_2 und table_w_rls, auf die Zeilenfilter angewendet werden. Der Benutzer hat nicht die Berechtigung SELECT auf table_2, auf die durch view_2 verwiesen wird.

Diagramm, das zeigt, wie Datenfilterung funktioniert

Die Abfrage für table_1 wird vollständig von der dedizierten Computeressource behandelt, da keine Filterung erforderlich ist. Die Abfragen zu „view_2“ und „table_w_rls“ erfordern eine Datenfilterung, um die Daten zurückzugeben, auf die der Benutzer zugreifen kann. Diese Abfragen werden durch die Datenfilterfunktion auf serverlosem Compute bearbeitet.

Unterstützung für Schreibvorgänge

Von Bedeutung

Dieses Feature befindet sich in der Public Preview.

In Databricks Runtime 16.3 und höher können Sie in Tabellen schreiben, auf die Zeilenfilter oder Spaltenmasken angewendet wurden, indem Sie die folgenden Optionen verwenden:

Um die Funktionalität von INSERT, UPDATE und DELETE zu erreichen, können Sie eine Stagingtabelle und die MERGE INTO- und WHEN MATCHED-Klauseln der WHEN NOT MATCHED-Anweisung verwenden.

Im Folgenden sehen Sie ein Beispiel dafür, wie man UPDATE mit MERGE INTO verwendet:

MERGE INTO target_table AS t
USING source_table AS s
ON t.id = s.id
WHEN MATCHED THEN
  UPDATE SET
    t.column1 = s.column1,
    t.column2 = s.column2;

Im Folgenden sehen Sie ein Beispiel dafür, wie man INSERT mit MERGE INTO verwendet:

MERGE INTO target_table AS t
USING source_table AS s
ON t.id = s.id
WHEN NOT MATCHED THEN
INSERT (id, column1, column2) VALUES (s.id, s.column1, s.column2);

Im Folgenden sehen Sie ein Beispiel für ein DELETE-Befehl: MERGE INTO

MERGE INTO target_table AS t
USING source_table AS s ON t.id = s.id
WHEN MATCHED AND s.some_column = TRUE THEN DELETE;

Unterstützung für DDL, SHOW, DESCRIBE und andere Befehle

In Databricks Runtime 17.1 und höher können Sie die folgenden Befehle in Kombination mit differenzierten zugriffsgesteuerten Objekten auf dedizierter Berechnung verwenden:

Bei Bedarf werden diese Befehle automatisch auf serverloser Berechnung ausgeführt.

Einige Befehle werden nicht unterstützt, einschließlich VACCUM, RESTOREund REORG TABLE.

Serverlose Computekosten

Kunden werden für die serverlosen Computeressourcen in Rechnung gestellt, die Datenfiltervorgänge ausführen. Für Preise Informationen, siehe Plattform Ebenen und Add-Ons.

Benutzer mit Zugriff können die system.billing.usage Tabelle abfragen, um zu sehen, wie viel ihnen berechnet wurde. Zum Beispiel zeigt die folgende Abfrage die Aufschlüsselung der Compute-Kosten nach Benutzer.

SELECT usage_date,
sku_name,
 identity_metadata.run_as,
SUM(usage_quantity) AS `DBUs consumed by FGAC`
FROM system.billing.usage
WHERE usage_date BETWEEN '2024-08-01' AND '2024-09-01'
 AND billing_origin_product = 'FINE_GRAINED_ACCESS_CONTROL'
GROUP BY 1, 2, 3 ORDER BY 1;

Leistungsansicht bei aktivierter Datenfilterung

Die Spark-Benutzeroberfläche für dedizierte Compute zeigt Metriken an, die Sie verwenden können, um die Leistung Ihrer Abfragen zu verstehen. Für jede Abfrage, die Sie auf der Compute-Ressource ausführen, zeigt die Registerkarte SQL/Dataframe die Abfrage-Graph-Zusicherung an. Wenn eine Abfrage an der Datenfilterung beteiligt war, zeigt die Benutzeroberfläche einen RemoteSparkConnectScan-Operator-Knoten am unteren Rand des Graphen an. Dieser Knoten zeigt Metrik an, die Sie zur Untersuchung der Abfrageleistung nutzen können. Siehe Compute-Informationen in der Spark-Benutzeroberfläche ansehen.

SparkUI zeigt den RemoteSparkConnectScan-Knoten an

Erweitern Sie den RemoteSparkConnectScan-Operator-Knoten, um Metriken zu sehen, die solche Fragen adressieren wie die folgenden:

  • Wie viel Zeit hat das Filtern der Daten in Anspruch genommen? Ansicht der Gesamt-Remote-Ausführungszeit
  • Wie viele Zeilen blieben nach dem Filtern der Daten übrig? „Zeilenausgabe“ anzeigen.
  • Wie viele Daten (in Bytes) wurden nach der Datenfilterung zurückgegeben? „Größe der Zeilenausgabe“ anzeigen.
  • Wie viele Datendateien wurden partitioniert gelöscht und mussten nicht aus dem Speicher gelesen werden? Ansicht „Gelöschte Dateien“ und „Größe der gelöschten Dateien“
  • Wie viele Datendateien konnten nicht gelöscht werden und mussten aus dem Speicher gelesen werden? Ansicht „Dateien lesen“ und „Größe der gelesenen Dateien“.
  • Von den Dateien, die gelesen werden mussten, wie viele befanden sich bereits im Cache? „Größe der Cachetreffer“ und „Größe der Cache-Fehlversuche“ anzeigen.

Einschränkungen

  • Nur Batch-Lesevorgänge werden für Streaming-Tabellen unterstützt. Tabellen mit Zeilenfiltern oder Spaltenmasken unterstützen keine Streamingworkloads auf dediziertem Compute.

  • Der Standardkatalog (spark.sql.catalog.spark_catalog) kann nicht geändert werden.

  • In Databricks Runtime 16.2 und unten gibt es keine Unterstützung für Schreib- oder Aktualisierungstabellenvorgänge in Tabellen, auf die Zeilenfilter oder Spaltenmasken angewendet wurden.

    Insbesondere werden DML-Vorgänge wie , INSERT, DELETE, UPDATE, REFRESH TABLEund MERGE, nicht unterstützt. Sie können nur (SELECT) aus diesen Tabellen lesen.

  • Schreibvorgänge für Tabellen in Databricks Runtime 16.3 und höher, wie zum Beispiel INSERT, DELETE und UPDATE, werden nicht unterstützt, können jedoch durchgeführt werden mit MERGE, das unterstützt wird.

  • In Databricks Runtime 16.2 und darunter werden Selbstverknüpfungen standardmäßig blockiert, wenn die Datenfilterung aufgerufen wird, da diese Abfragen möglicherweise unterschiedliche Schnappschüsse derselben Remotetabelle zurückgeben. Sie können diese Abfragen jedoch aktivieren, indem Sie spark.databricks.remoteFiltering.blockSelfJoins auf false auf dem Rechner festlegen, auf dem Sie diese Befehle ausführen.

    In Databricks Runtime 16.3 und höher werden Momentaufnahmen automatisch zwischen dedizierten und serverlosen Computeressourcen synchronisiert. Aufgrund dieser Synchronisierung geben Self-Join-Abfragen, die die Datenfilterfunktion verwenden, identische Momentaufnahmen zurück und sind standardmäßig aktiviert. Die Ausnahmen sind materialisierte Sichten und alle Ansichten, materialisierten Ansichten und Streamingtabellen, die mithilfe von Delta Sharing freigegeben werden. Bei diesen Objekten werden Selbstverknüpfungen standardmäßig blockiert. Sie können diese Abfragen jedoch aktivieren, indem Sie für den Rechner, auf dem Sie diese Befehle ausführen, spark.databricks.remoteFiltering.blockSelfJoins auf false setzen.

    Wenn Sie Selbstverknüpfungsabfragen für materialisierte Ansichten und alle Ansichten, materialisierten Ansichten und Streamingtabellen aktivieren, müssen Sie sicherstellen, dass es keine gleichzeitigen Schreibvorgänge für die Objekte gibt, die verknüpft werden.

  • Kein Support in Docker-Bildern.
  • Keine Unterstützung bei der Verwendung von Databricks Container Services.
  • Sie müssen die Ports 8443 und 8444 öffnen, um eine differenzierte Zugriffssteuerung auf dedizierter Compute zu ermöglichen. Siehe Netzwerksicherheitsgruppenregeln.