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.getpour les ensembles de données.bigquery.tables.getIamPolicypour 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. NULL si la ressource elle-même 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 |
-
PROJECT_ID(facultatif) : ID de votre projet Google Cloud . Si non spécifié, le projet par défaut est utilisé. -
REGION: tout nom de région d'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_PRIVILEGESdoivent contenir une clauseWHERElimitant 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_nameETobject_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 modifier et de supprimer des tables dans mydataset, y compris la table testdata. Toutefois, comme ces autorisations n'ont pas été accordées explicitement dans le tableau testdata, elles n'apparaissent pas dans les résultats du deuxième exemple.