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. Il s'agit de 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 |
Facultatif : PROJECT_ID
: 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_PRIVILEGES
doivent contenir une clauseWHERE
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
ETobject_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
possède le 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é accordées explicitement dans le tableau testdata
, elles n'apparaissent pas dans les résultats du deuxième exemple.