import (
"context"
"fmt"
"cloud.google.com/go/bigquery"
)
// revokeDatasetAccess updates the access control on a dataset to remove all
// access entries that reference a specific entity.
func revokeDatasetAccess(projectID, datasetID, entity string) error {
// projectID := "my-project-id"
// datasetID := "mydataset"
// entity := "user@mydomain.com"
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
}
var newAccessList []*bigquery.AccessEntry
for _, entry := range meta.Access {
if entry.Entity != entity {
newAccessList = append(newAccessList, entry)
}
}
// Only proceed with update if something in the access list was removed.
// Additionally, we use the ETag from the initial metadata to ensure no
// other changes were made to the access list in the interim.
if len(newAccessList) < len(meta.Access) {
update := bigquery.DatasetMetadataToUpdate{
Access: newAccessList,
}
if _, err := ds.Update(ctx, update, meta.ETag); err != nil {
return err
}
}
return nil
}
# TODO(developer): Set dataset_id to the ID of the dataset to fetch.
dataset_id = "your-project.your_dataset"
# TODO(developer): Set entity_id to the ID of the email or group from whom you are revoking access.
entity_id = "user-or-group-to-remove@example.com"
from google.cloud import bigquery
# Construct a BigQuery client object.
client = bigquery.Client()
dataset = client.get_dataset(dataset_id) # Make an API request.
entries = list(dataset.access_entries)
dataset.access_entries = [
entry for entry in entries if entry.entity_id != entity_id
]
dataset = client.update_dataset(
dataset,
# Update just the `access_entries` property of the dataset.
["access_entries"],
) # Make an API request.
full_dataset_id = f"{dataset.project}.{dataset.dataset_id}"
print(f"Revoked dataset access for '{entity_id}' to ' dataset '{full_dataset_id}.'")
次のステップ
他の Google Cloud プロダクトに関連するコードサンプルの検索およびフィルタ検索を行うには、Google Cloud のサンプルをご覧ください。