Obtenir des métadonnées de contrôle d'accès à l'aide de INFORMATION_SCHEMA

INFORMATION_SCHEMA est une série de vues donnant accès aux métadonnées sur des ensembles de données, des routines, des tables, des vues, des tâches, des réservations et des données de streaming.

INFORMATION_SCHEMA.OBJECT_PRIVILEGES contient des métadonnées sur les liaisons de contrôle des accès.

Autorisations requises

Pour OBJECT_PRIVILEGES, vous devez disposer des autorisations suivantes:

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

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é.

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

Vue OBJECT_PRIVILEGES

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 nulle pour les types de ressources de l'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, SCHEMA (ensemble de données), TABLE ou VIEW.
PRIVLEGE_TYPE STRING L'ID du rôle, par exemple roles/bigquery.dataEditor
GRANTEE STRING Type et utilisateur auxquels le rôle est attribué.

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 d'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 d'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 |
  +----------------+---------------+--------------+-------------+----------------------+------------------------------------+