Visualização OBJECT_PRIVILEGES

A visualização INFORMATION_SCHEMA.OBJECT_PRIVILEGES contém metadados sobre vinculações de controle de acesso que são explicitamente definidas nos objetos do BigQuery. Essa visualização não contém metadados sobre as vinculações de controle de acesso herdadas.

Permissões necessárias

Para consultar a visualização INFORMATION_SCHEMA.OBJECT_PRIVILEGES, você precisa das seguintes permissões de gerenciamento de identidade e acesso (IAM):

  • bigquery.datasets.get para conjuntos de dados.
  • bigquery.tables.getIamPolicy para tabelas e visualizações.

Para mais informações sobre as permissões do BigQuery, consulte Controle de acesso com o IAM.

Esquema

Quando você consulta a visualização INFORMATION_SCHEMA.OBJECT_PRIVILEGES, os resultados da consulta contêm uma linha para cada vinculação de controle de acesso de um recurso.

A visualização INFORMATION_SCHEMA.OBJECT_PRIVILEGES tem o seguinte esquema:

Nome da coluna Tipo de dados Valor
OBJECT_CATALOG STRING O ID do projeto que contém o recurso.
OBJECT_SCHEMA STRING O nome do conjunto de dados que contém o recurso. O valor é NULL se o recurso for um conjunto de dados.
OBJECT_NAME STRING O nome da tabela, visualização ou conjunto de dados ao qual a política se aplica.
OBJECT_TYPE STRING O tipo de recurso, como SCHEMA (conjunto de dados), TABLE, VIEW e EXTERNAL.
PRIVILEGE_TYPE STRING O ID do papel, como roles/bigquery.dataEditor.
GRANTEE STRING O tipo de usuário e o usuário ao qual o papel é concedido.

Escopo e sintaxe

As consultas nessa visualização precisam incluir um qualificador de região. Um ID do projeto é opcional. Se nenhum ID do projeto for especificado, será usado o projeto em que a consulta será executada. A tabela a seguir explica o escopo da região dessa visualização:

Nome da visualização Escopo do recurso Escopo da região
[PROJECT_ID.]`region-REGION`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES Nível do projeto REGION
Substitua:

  • Opcional: PROJECT_ID: o ID do seu projeto do Google Cloud. Se não for especificado, o projeto padrão será usado.
+ REGION: qualquer nome da região do conjunto de dados. Por exemplo, region-us.

Exemplo

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

Limitações

  • As consultas OBJECT_PRIVILEGES precisam conter uma cláusula WHERE que limite as consultas a um único conjunto de dados, tabela ou visualização.
  • As consultas para recuperar metadados de controle de acesso de um conjunto de dados precisam especificar object_name.
  • As consultas para recuperar metadados de controle de acesso para uma tabela ou visualização precisam especificar object_name E object_schema.

Exemplos

O exemplo a seguir recupera todas as colunas da visualização INFORMATION_SCHEMA.OBJECT_PRIVILEGES.

Para executar a consulta em um projeto diferente do projeto em que a consulta está sendo executada, adicione o ID do projeto à região no seguinte formato: `project_id`.`region_id`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES.

O exemplo a seguir recebe todos os metadados de controle de acesso para o conjunto de dados mydataset no projeto mycompany:

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

Os resultados terão a aparência abaixo:

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

O exemplo a seguir recebe todas as informações de controle de acesso para a tabela testdata no conjunto de dados mydataset:

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

Os resultados vão ter a aparência abaixo:

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

A visualização INFORMATION_SCHEMA.OBJECT_PRIVILEGES mostra apenas as vinculações de controle de acesso que são definidas explicitamente. O primeiro exemplo mostra que o usuário cloudysanfrancisco@gmail.com tem o papel bigquery.dataOwner no conjunto de dados mydataset. O usuário cloudysanfrancisco@gmail.com herda permissões para criar, atualizar e excluir tabelas em mydataset, incluindo a tabela testdata. No entanto, como essas permissões não foram concedidas explicitamente na tabela testdata, elas não aparecem nos resultados do segundo exemplo.