Zugriff auf Datasets steuern

In diesem Dokument wird gezeigt, wie Sie den Zugriff auf Datasets in BigQuery steuern.

Sie können den Zugriff auch auf Tabellen-/Ansichtsebene und auf einer höheren Ebene in der Ressourcenhierarchie von Cloud IAM steuern.

Sie können den Zugriff auf Spalten mithilfe der BigQuery-Sicherheit auf Spaltenebene einschränken.

Übersicht

Berechtigungen auf Dataset-Ebene legen fest, welche Nutzer, Gruppen und Dienstkonten auf die Tabellen, Ansichten und Tabellendaten in einem bestimmten Dataset zugreifen dürfen. Wenn Sie beispielsweise einem Nutzer in einem bestimmten Dataset die Cloud IAM-Rolle bigquery.dataOwner zuweisen, kann dieser Tabellen und Ansichten im Dataset erstellen, aktualisieren und löschen.

Sie können die API-Methode datasets.insert aufrufen, um Zugriffssteuerungen während der Dataset-Erstellung anzuwenden.

Zugriffssteuerungen können nicht während der Erstellung von Datasets in der Cloud Console, der klassischen BigQuery-Web-UI oder dem Befehlszeilentool festgelegt werden.

Zugriffssteuerungen können auf bereits erstellte Datasets auf folgende Weise angewendet werden:

  • Mit der Cloud Console oder der klassischen BigQuery-Web-UI
  • Mit dem Befehl bq update über die Befehlszeile
  • Durch Aufrufen der API-Methode datasets.patch
  • Mit den Clientbibliotheken

Erforderliche Berechtigungen

Zum Zuweisen oder Aktualisieren von Zugriffssteuerungen müssen Sie mindestens die Berechtigungen bigquery.datasets.update und bigquery.datasets.get erhalten. Die folgenden vordefinierten Cloud IAM-Rollen enthalten die Berechtigungen bigquery.datasets.update und bigquery.datasets.get:

  • bigquery.dataOwner
  • bigquery.admin

Wenn ein Nutzer mit Berechtigungen vom Typ bigquery.datasets.create ein Dataset erstellt, hat er dafür außerdem bigquery.dataOwner-Zugriff. Mit bigquery.dataOwner-Zugriff haben Nutzer die Möglichkeit, von ihnen erstellte Datasets zu aktualisieren.

Weitere Informationen zu IAM-Rollen und Berechtigungen in BigQuery finden Sie unter Vordefinierte Rollen und Berechtigungen.

Zugriff auf ein Dataset steuern

So weisen Sie einem Dataset Zugriffssteuerungen zu:

Console

  1. Wählen Sie aus Resources (Ressourcen) ein Dataset aus und klicken Sie dann rechts im Fenster auf Share dataset (Dataset freigeben).

    Personen zu Dataset hinzufügen

  2. Geben Sie im Bereich Dataset freigeben im Tab Dataset-Berechtigungen in das Textfeld Mitglieder hinzufügen die Entität ein, die Sie hinzufügen möchten. Sie können eine der folgenden Entitäten wählen:

    • Google-Konto-E-Mail: Gewährt einem einzelnen Google-Konto Zugriff auf das Dataset
    • Google Group: Gewährt allen Mitgliedern einer Google Group Zugriff auf das Dataset
    • Google Apps-Domain: Gewährt allen Nutzern und Gruppen in einer Google-Domain Zugriff auf das Dataset.
    • Dienstkonto: Gewährt einem Dienstkonto Zugriff auf das Dataset
    • Beliebig: Geben Sie "allUsers" an, wenn das Dataset öffentlich verfügbar sein soll
    • Alle Google-Konten: Geben Sie "allAuthenticatedUsers" an, wenn Sie allen bei einem Google-Konto angemeldeten Nutzern den Zugriff gewähren möchten
  3. Wählen Sie unter Rolle auswählen die Option BigQuery und eine geeignete vordefinierte IAM-Rolle für die neuen Mitglieder aus. Weitere Informationen zu den Berechtigungen, die jeder vordefinierten BigQuery-Rolle zugewiesen sind, finden Sie auf der Seite "Zugriffssteuerung" im Abschnitt Rollen.

  4. Klicken Sie auf Done (Fertig).

Klassische UI

  1. Klicken Sie rechts neben dem Dataset auf den Drop-down-Pfeil und wählen Sie Share Dataset (Dataset freigeben) aus.

  2. Klicken Sie im Dialog Dataset freigeben zum Hinzufügen von Personen auf den Drop-down-Pfeil links neben dem Feld und wählen Sie die passende Option. Wenn Sie mithilfe der klassischen Web-UI Zugriffssteuerungen für ein Dataset erteilen, können Sie den folgenden Nutzern und Gruppen Zugriff gewähren:

    • Nutzer per E-Mail – verleiht einem einzelnen Google-Konto Zugriff auf das Dataset
    • Gruppe per E-Mail – gewährt allen Mitgliedern einer Gruppe Zugriff auf das Dataset
    • Domain – gewährt allen Nutzern und Gruppen in einer Google-Domain Zugriff auf das Dataset
    • Alle authentifizierten Nutzer – gewährt allen Google-Kontoinhabern Zugriff auf das Dataset, sodass das Dataset öffentlich wird
    • Projektinhaber – verleiht allen Projektinhabern Zugriff auf das Dataset
    • Projektbetrachter – gewährt allen Projektbetrachtern Zugriff auf das Dataset
    • Projektbearbeiter – gewährt allen Projektbearbeitern Zugriff auf das Dataset
    • Autorisierte Ansicht – gewährt einer Ansicht Zugriff auf das Dataset

  3. Geben Sie einen Wert in das Textfeld ein. Wenn Sie beispielsweise Nutzer per E-Mail oder Gruppe per-E-Mail auswählen, müssen Sie die E-Mail-Adresse des Nutzers oder der Gruppe eingeben.

  4. Klicken Sie rechts neben dem Feld Add People (Personen hinzufügen) auf Can view (Darf ansehen) und wählen Sie in der Liste die passende Rolle aus.

    Personen zu Dataset hinzufügen

  5. Klicken Sie auf Hinzufügen und dann auf Änderungen speichern.

bq

  1. Schreiben Sie die vorhandenen Dataset-Informationen (einschließlich Zugriffssteuerungen) mit dem Befehl show in eine JSON-Datei. Wenn sich das Dataset in einem anderen Projekt als Ihrem Standardprojekt befindet, fügen Sie dem Dataset-Namen die Projekt-ID im folgenden Format hinzu: project_id:dataset.

    bq show \
    --format=prettyjson \
    project_id:dataset > path_to_file
    

    Dabei gilt:

    • project_id ist die Projekt-ID.
    • dataset ist der Name des Datasets.
    • path_to_file ist der Pfad zur JSON-Datei auf Ihrem lokalen Computer.

    Beispiele:

    Geben Sie den folgenden Befehl ein, um die Zugriffssteuerungen für mydataset in eine JSON-Datei zu schreiben. mydataset befindet sich in Ihrem Standardprojekt.

      bq show --format=prettyjson mydataset > /tmp/mydataset.json
    

    Geben Sie den folgenden Befehl ein, um die Zugriffssteuerungen für mydataset in eine JSON-Datei zu schreiben. mydataset befindet sich in myotherproject.

      bq show --format=prettyjson \
      myotherproject:mydataset > /tmp/mydataset.json
    
  2. Nehmen Sie die Änderungen im Abschnitt "access" der JSON-Datei vor. Sie können specialGroup-Einträge beliebig einfügen oder entfernen: projectOwners, projectWriters, projectReaders und allAuthenticatedUsers. Außerdem können Sie folgende Einträge angeben, entfernen oder ändern: userByEmail, groupByEmail und domain.

    Der Abschnitt "access" der JSON-Datei eines Datasets sieht zum Beispiel so aus:

    {
     "access": [
      {
       "role": "READER",
       "specialGroup": "projectReaders"
      },
      {
       "role": "WRITER",
       "specialGroup": "projectWriters"
      },
      {
       "role": "OWNER",
       "specialGroup": "projectOwners"
      },
      {
       "role": "READER",
       "specialGroup": "allAuthenticatedUsers"
      },
      {
       "role": "READER",
       "domain": "domain_name"
      },
      {
       "role": "WRITER",
       "userByEmail": "user_email"
      },
      {
       "role": "READER",
       "groupByEmail": "group_email"
      }
     ],
     ...
    }
    

  3. Wenn die Änderungen abgeschlossen sind, führen Sie den Befehl update aus und fügen mit dem Flag --source die JSON-Datei hinzu. Wenn sich das Dataset in einem anderen Projekt als Ihrem Standardprojekt befindet, fügen Sie dem Dataset-Namen die Projekt-ID im folgenden Format hinzu: project_id:dataset.

    bq update \
    --source path_to_file \
    project_id:dataset
    

    Dabei gilt:

    • path_to_file ist der Pfad zur JSON-Datei auf Ihrem lokalen Computer.
    • project_id ist die Projekt-ID.
    • dataset ist der Name des Datasets.

    Beispiele:

    Geben Sie den folgenden Befehl ein, um die Zugriffssteuerungen für mydataset zu aktualisieren. mydataset befindet sich in Ihrem Standardprojekt.

        bq update --source /tmp/mydataset.json mydataset
    

    Geben Sie den folgenden Befehl ein, um die Zugriffssteuerungen für mydataset zu aktualisieren. mydataset befindet sich in myotherproject.

        bq update --source /tmp/mydataset.json myotherproject:mydataset
    
  4. Geben Sie den Befehl show noch einmal ein, ohne die Informationen in eine Datei zu schreiben, um die Änderungen der Zugriffssteuerung zu prüfen.

    bq show --format=prettyjson dataset
    

    oder

    bq show --format=prettyjson project_id:dataset
    

API

Rufen Sie datasets.insert mit einer definierten Dataset-Ressource auf, um Zugriffssteuerungen anzuwenden, wenn das Dataset erstellt wird. Rufen Sie datasets.patch auf und verwenden Sie das Attribut access in der Dataset-Ressource, um die Zugriffssteuerungen zu aktualisieren.

Da die Methode datasets.update die gesamte Dataset-Ressource ersetzt, ist datasets.patch die bevorzugte Methode zum Aktualisieren von Zugriffssteuerungen.

Go

Bevor Sie dieses Beispiel ausprobieren, folgen Sie den Schritten zur Einrichtung von Go in der BigQuery-Kurzanleitung: Clientbibliotheken verwenden. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Go API.

Legen Sie im Attribut dataset.access_entries die Zugriffssteuerungen für ein Dataset fest. Rufen Sie dann die Funktion client.update_dataset() auf, um das Attribut zu aktualisieren.

import (
	"context"
	"fmt"

	"cloud.google.com/go/bigquery"
)

// updateDatasetAccessControl demonstrates how the access control policy of a dataset
// can be amended by adding an additional entry corresponding to a specific user identity.
func updateDatasetAccessControl(projectID, datasetID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	ds := client.Dataset(datasetID)
	meta, err := ds.Metadata(ctx)
	if err != nil {
		return err
	}
	// Append a new access control entry to the existing access list.
	update := bigquery.DatasetMetadataToUpdate{
		Access: append(meta.Access, &bigquery.AccessEntry{
			Role:       bigquery.ReaderRole,
			EntityType: bigquery.UserEmailEntity,
			Entity:     "sample.bigquery.dev@gmail.com"},
		),
	}

	// Leverage the ETag for the update to assert there's been no modifications to the
	// dataset since the metadata was originally read.
	if _, err := ds.Update(ctx, update, meta.ETag); err != nil {
		return err
	}
	return nil
}

Python

Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Python in der BigQuery-Kurzanleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur BigQuery Python API.

Legen Sie im Attribut dataset.access_entries die Zugriffssteuerungen für ein Dataset fest. Rufen Sie dann die Funktion client.update_dataset() auf, um das Attribut zu aktualisieren.
from google.cloud import bigquery

# Construct a BigQuery client object.
client = bigquery.Client()

# TODO(developer): Set dataset_id to the ID of the dataset to fetch.
# dataset_id = 'your-project.your_dataset'

dataset = client.get_dataset(dataset_id)  # Make an API request.

entry = bigquery.AccessEntry(
    role="READER",
    entity_type="userByEmail",
    entity_id="sample.bigquery.dev@gmail.com",
)

entries = list(dataset.access_entries)
entries.append(entry)
dataset.access_entries = entries

dataset = client.update_dataset(dataset, ["access_entries"])  # Make an API request.

full_dataset_id = "{}.{}".format(dataset.project, dataset.dataset_id)
print(
    "Updated dataset '{}' with modified user permissions.".format(full_dataset_id)
)

Weitere Informationen