Obtén metadatos de control de acceso mediante INFORMATION_SCHEMA

INFORMATION_SCHEMA es una serie de vistas que proporcionan acceso a metadatos sobre conjuntos de datos, rutinas, tablas, vistas, trabajos, reservas y datos de transmisión.

INFORMATION_SCHEMA.OBJECT_PRIVILEGES contiene metadatos sobre las vinculaciones de control de acceso.

Permisos necesarios

Para OBJECT_PRIVILEGES, debes tener los siguientes permisos:

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

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.

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

Vista OBJECT_PRIVILEGES

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 nulo para los tipos de recursos del 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 SCHEMA (conjunto de datos), TABLE o VIEW.
PRIVLEGE_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.

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