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