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 |
- 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áusulaWHERE
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
yobject_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.