Vista OBJECT_PRIVILEGES

La vista INFORMATION_SCHEMA.OBJECT_PRIVILEGES contiene metadatos sobre las vinculaciones de control de acceso que se definen explícitamente en los objetos de BigQuery. Esta vista no contiene metadatos sobre las vinculaciones de control de acceso heredadas.

Permisos obligatorios

Para consultar la vista INFORMATION_SCHEMA.OBJECT_PRIVILEGES, necesitas los siguientes permisos de gestión de identidades y accesos (IAM):

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

Para obtener más información sobre los permisos de BigQuery, consulta Control de acceso con gestión de identidades y accesos.

Esquema

Cuando consultas la vista INFORMATION_SCHEMA.OBJECT_PRIVILEGES, los resultados de la consulta contienen una fila por cada enlace 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 recurso.
OBJECT_SCHEMA STRING Nombre del conjunto de datos que contiene el recurso. Este es el valor NULL si el recurso en sí es un conjunto de datos.
OBJECT_NAME STRING 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 del rol, como roles/bigquery.dataEditor.
GRANTEE STRING El tipo de usuario y el usuario al que se le ha concedido el rol.

Ámbito y sintaxis

Las consultas en esta vista deben incluir un calificador de región. El ID de proyecto es opcional. Si no se especifica ningún ID de proyecto, se usa el proyecto en el que se ejecuta la consulta. En la siguiente tabla se explica el ámbito de la región de esta vista:

Nombre de la vista Ámbito de los recursos Ámbito de la región
[PROJECT_ID.]`region-REGION`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES Nivel de proyecto REGION
Sustituye lo siguiente:
  • Opcional: PROJECT_ID: el ID de tu Google Cloud proyecto. Si no se especifica, se usa el proyecto predeterminado.
  • REGION: cualquier nombre de región del conjunto de datos. Por ejemplo, `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 limite las consultas a un solo conjunto de datos, tabla o vista.
  • Las consultas para obtener metadatos de control de acceso de un conjunto de datos deben especificar el object_name.
  • Las consultas para obtener metadatos de control de acceso de una tabla o una vista deben especificar object_name Y object_schema.

Ejemplos

En el siguiente ejemplo se obtienen todas las columnas de la vista INFORMATION_SCHEMA.OBJECT_PRIVILEGES.

Para ejecutar la consulta en un proyecto distinto del proyecto en el que se está ejecutando, añade 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 del conjunto de datos mydataset del proyecto mycompany:

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

Los resultados deberían tener este aspecto:

  +----------------+---------------+-------------+-------------+---------------------------+-----------------------------------+
  | 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 de la tabla testdata del 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 tener este aspecto:

  +----------------+---------------+--------------+-------------+----------------------+------------------------------------+
  | 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 los enlaces de control de acceso que se han definido explícitamente. 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 eliminar tablas en mydataset, incluida la tabla testdata. Sin embargo, como esos permisos no se concedieron explícitamente en la tabla testdata, no aparecen en los resultados del segundo ejemplo.