bigquery/cloud-client/grantAccessToDataset.js (23 lines of code) (raw):
// Copyright 2025 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
'use strict';
async function main(datasetId, entityId, role) {
// [START bigquery_grant_access_to_dataset]
/**
* TODO(developer): Update and un-comment below lines.
*/
// const datasetId = "my_project_id.my_dataset_name";
// ID of the user or group from whom you are adding access.
// const entityId = "user-or-group-to-add@example.com";
// One of the "Basic roles for datasets" described here:
// https://cloud.google.com/bigquery/docs/access-control-basic-roles#dataset-basic-roles
// const role = "READER";
const {BigQuery} = require('@google-cloud/bigquery');
// Instantiate a client.
const client = new BigQuery();
// Type of entity you are granting access to.
// Find allowed allowed entity type names here:
// https://cloud.google.com/bigquery/docs/reference/rest/v2/datasets#resource:-dataset
const entityType = 'groupByEmail';
async function grantAccessToDataset() {
const [dataset] = await client.dataset(datasetId).get();
// The 'access entries' array is immutable. Create a copy for modifications.
const entries = [...dataset.metadata.access];
// Append an AccessEntry to grant the role to a dataset.
// Find more details about the AccessEntry object in the BigQuery documentation:
// https://cloud.google.com/python/docs/reference/bigquery/latest/google.cloud.bigquery.dataset.AccessEntry
entries.push({
role,
[entityType]: entityId,
});
// Assign the array of AccessEntries back to the dataset.
const metadata = {
access: entries,
};
// Update will only succeed if the dataset
// has not been modified externally since retrieval.
//
// See the BigQuery client library documentation for more details on metadata updates:
// https://cloud.google.com/nodejs/docs/reference/bigquery/latest
// Update just the 'access entries' property of the dataset.
await client.dataset(datasetId).setMetadata(metadata);
console.log(
`Role '${role}' granted for entity '${entityId}' in '${datasetId}'.`
);
}
// [END bigquery_grant_access_to_dataset]
await grantAccessToDataset();
}
exports.grantAccessToDataset = main;