Vista de OBJECT_PRIVILEGES

La vista INFORMATION_SCHEMA.OBJECT_PRIVILEGES contiene metadatos sobre vinculaciones de control de acceso que se establecen de forma explícita en objetos de BigQuery. Esta vista no contiene metadatos sobre las vinculaciones de control de acceso heredadas.

Permisos necesarios

Para consultar la vista INFORMATION_SCHEMA.OBJECT_PRIVILEGES, necesitas los siguientes permisos de Identity and Access Management (IAM):

  • bigquery.datasets.get para conjuntos de datos.
  • bigquery.tables.getIamPolicy para tablas y vistas

Para obtener más información sobre IAM de BigQuery, consulta Control de acceso con IAM.

Esquema

Cuando consultas la vista INFORMATION_SCHEMA.OBJECT_PRIVILEGES, los resultados contienen una fila por cada vinculación de control de acceso de un recurso.

La vista INFORMATION_SCHEMA.OBJECT_PRIVILEGES tiene el siguiente esquema:

Nombre de la columna Tipo de datos Valor
OBJECT_CATALOG STRING El ID del proyecto que contiene el concentrador
OBJECT_SCHEMA STRING El nombre del conjunto de datos que contiene el recurso. Esto es NULL si el recurso en sí es un conjunto de datos.
OBJECT_NAME STRING El nombre de la tabla, la vista o el conjunto de datos al que se aplica la política.
OBJECT_TYPE STRING El tipo de recurso, como SCHEMA (conjunto de datos), TABLE, VIEW y EXTERNAL.
PRIVILEGE_TYPE STRING El ID de la función, como roles/bigquery.dataEditor.
GRANTEE STRING El tipo de usuario y el usuario al que se le otorga la función.

Permiso y sintaxis

Las consultas realizadas a esta vista deben incluir un calificador de región. El uso de un ID del proyecto es opcional. Si no se especifica un ID del proyecto, se usa el proyecto en el que se ejecuta la consulta. En la siguiente tabla, se explica el permiso de la región para esta vista:

Nombre de la vista Permiso del recurso Permiso de la región
[PROJECT_ID.]`region-REGION`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES Nivel de proyecto REGION
Reemplaza lo siguiente:

  • Opcional: PROJECT_ID: el ID del proyecto de Google Cloud. Si no se especifica, se usa el proyecto predeterminado.
+ REGION: Cualquier nombre de región del conjunto de datos. Un ejemplo es region-us.

Ejemplo

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

Limitaciones

  • Las consultas OBJECT_PRIVILEGES deben contener una cláusula WHERE que limita las consultas a un solo conjunto de datos, tabla o vista.
  • Las consultas para recuperar los metadatos de control de acceso de un conjunto de datos deben especificar el object_name.
  • Las consultas para recuperar los metadatos de control de acceso de una tabla o vista deben especificar object_name y object_schema.

Ejemplos

En el ejemplo que se muestra a continuación, se recuperan todas las columnas de la vista INFORMATION_SCHEMA.OBJECT_PRIVILEGES.

Para ejecutar la consulta en un proyecto que no sea el en el que se ejecuta la consulta, agrega el ID del proyecto a la región con el siguiente formato: `project_id`.`region_id`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES.

En el siguiente ejemplo, se obtienen todos los metadatos de control de acceso para el conjunto de datos mydataset en el proyecto mycompany:

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

Los resultados deberían verse así:

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

En el siguiente ejemplo, se obtiene toda la información de control de acceso para la tabla testdata en el conjunto de datos mydataset:

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

Los resultados deberían verse así:

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

La vista INFORMATION_SCHEMA.OBJECT_PRIVILEGES solo muestra las vinculaciones de control de acceso que se establecen de forma explícita. En el primer ejemplo, se muestra que el usuario cloudysanfrancisco@gmail.com tiene el rol bigquery.dataOwner en el conjunto de datos mydataset. El usuario cloudysanfrancisco@gmail.com hereda los permisos para crear, actualizar y borrar tablas en mydataset, incluida la tabla testdata. Sin embargo, como esos permisos no se otorgaron de forma explícita en la tabla testdata, no aparecen en los resultados del segundo ejemplo.