Vue OBJECT_PRIVILEGES

La vue INFORMATION_SCHEMA.OBJECT_PRIVILEGES contient des métadonnées sur les liaisons de contrôle des accès qui sont explicitement définies sur des objets BigQuery. Cette vue ne contient pas de métadonnées sur les liaisons de contrôle des accès héritées.

Autorisations requises

Pour interroger la vue INFORMATION_SCHEMA.OBJECT_PRIVILEGES, vous avez besoin des autorisations IAM (Identity and Access Management) suivantes:

  • bigquery.datasets.get pour les ensembles de données.
  • bigquery.tables.getIamPolicy pour les tables et les vues.

Pour plus d'informations sur les autorisations BigQuery, consultez la page Contrôle des accès avec IAM.

Schéma

Lorsque vous interrogez la vue INFORMATION_SCHEMA.OBJECT_PRIVILEGES, les résultats de la requête contiennent une ligne pour chaque liaison de contrôle d'accès d'une ressource.

La vue INFORMATION_SCHEMA.OBJECT_PRIVILEGES présente le schéma suivant :

Nom de la colonne Type de données Valeur
OBJECT_CATALOG STRING ID du projet contenant la ressource.
OBJECT_SCHEMA STRING Nom de l'ensemble de données contenant la ressource. Cette valeur est NULL si la ressource est un ensemble de données.
OBJECT_NAME STRING Nom de la table, de la vue ou de l'ensemble de données auquel la règle s'applique.
OBJECT_TYPE STRING Type de ressource, tel que SCHEMA (ensemble de données), TABLE, VIEW et EXTERNAL.
PRIVILEGE_TYPE STRING L'ID du rôle, par exemple roles/bigquery.dataEditor
GRANTEE STRING Type et utilisateur auxquels le rôle est attribué.

Champ d'application et syntaxe

Les requêtes exécutées sur cette vue doivent inclure un qualificatif de région. L'ID de projet est facultatif. Si aucun ID de projet n'est spécifié, le projet dans lequel la requête est exécutée est utilisé. Le tableau suivant explique le champ d'application de la région pour cette vue :

Nom de la vue Champ d'application de la ressource Champ d'application de la région
[PROJECT_ID.]`region-REGION`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES Niveau Projet REGION
Remplacez les éléments suivants :

  • Facultatif : PROJECT_ID : ID de votre projet Google Cloud. Si non spécifié, le projet par défaut est utilisé.
 + REGION : nom de la région de l'ensemble de données. Par exemple, region-us.

Exemple

-- Returns metadata for the access control bindings for mydataset.
SELECT * FROM myproject.`region-us`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES
WHERE object_name = "mydataset";

Limites

  • Les requêtes OBJECT_PRIVILEGES doivent contenir une clause WHERE limitant les requêtes à un seul ensemble de données, une seule table ou une seule vue.
  • Les requêtes de récupération des métadonnées de contrôle d'accès pour un ensemble de données doivent spécifier l'élément object_name.
  • Les requêtes de récupération des métadonnées de contrôle des accès pour une table ou une vue doivent spécifier object_name ET object_schema.

Exemples

L'exemple suivant récupère toutes les colonnes de la vue INFORMATION_SCHEMA.OBJECT_PRIVILEGES.

Pour exécuter la requête sur un projet autre que celui dans lequel la requête est en cours d'exécution, ajoutez l'ID du projet à la région, en respectant le format suivant : `project_id`.`region_id`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES.

L'exemple suivant récupère toutes les métadonnées de contrôle des accès pour l'ensemble de données mydataset dans le projet mycompany :

SELECT *
FROM mycompany.`region-us`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES
WHERE object_name = "mydataset"

Les résultats doivent se présenter sous la forme suivante :

  +----------------+---------------+-------------+-------------+---------------------------+-----------------------------------+
  | object_catalog | object_schema | object_name | object_type |  privilege_type           | grantee                           |
  +----------------+---------------+-------------+-------------+---------------------------+-----------------------------------+
  | mycompany      | NULL          | mydataset   | SCHEMA      | roles/bigquery.dataEditor | projectEditor:mycompany           |
  +----------------+---------------+-------------+-------------+---------------------------+-----------------------------------+
  | mycompany      | NULL          | mydataset   | SCHEMA      | roles/bigquery.dataOwner  | projectOwner:mycompany            |
  +----------------+---------------+-------------+-------------+---------------------------+-----------------------------------+
  | mycompany      | NULL          | mydataset   | SCHEMA      | roles/bigquery.dataOwner  | user:cloudysanfrancisco@gmail.com |
  +----------------+---------------+-------------+-------------+---------------------------+-----------------------------------+
  | mycompany      | NULL          | mydataset   | SCHEMA      | roles/bigquery.dataViwer  | projectViewer:mycompany           |
  +----------------+---------------+-------------+-------------+---------------------------+-----------------------------------+
  

L'exemple suivant récupère toutes les informations de contrôle des accès pour la table testdata de l'ensemble de données mydataset :

SELECT *
FROM mycompany.`region-us`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES
WHERE object_schema = "mydataset" AND object_name = "testdata"

Les résultats doivent se présenter sous la forme suivante :

  +----------------+---------------+--------------+-------------+----------------------+------------------------------------+
  | object_catalog | object_schema |  object_name | object_type |  privilege_type      | grantee                            |
  +----------------+---------------+--------------+-------------+----------------------+------------------------------------+
  | mycompany      | mydataset     | testdata     | TABLE       | roles/bigquery.admin | user:baklavainthebalkans@gmail.com |
  +----------------+---------------+--------------+-------------+----------------------+------------------------------------+
  

La vue INFORMATION_SCHEMA.OBJECT_PRIVILEGES n'affiche que les liaisons de contrôle des accès qui sont explicitement définies. Le premier exemple montre que l'utilisateur cloudysanfrancisco@gmail.com dispose du rôle bigquery.dataOwner sur l'ensemble de données mydataset. L'utilisateur cloudysanfrancisco@gmail.com hérite des autorisations permettant de créer, de mettre à jour et de supprimer des tables dans mydataset, y compris la table testdata. Toutefois, comme ces autorisations n'ont pas été explicitement accordées sur la table testdata, elles n'apparaissent pas dans les résultats du deuxième exemple.