Vista OBJECT_PRIVILEGES

A visualização INFORMATION_SCHEMA.OBJECT_PRIVILEGES contém metadados sobre associações de controlo de acesso que são definidas explicitamente em objetos do BigQuery. Esta vista não contém metadados sobre as associações de controlo de acesso herdadas.

Autorizações necessárias

Para consultar a vista INFORMATION_SCHEMA.OBJECT_PRIVILEGES, precisa das seguintes autorizações de gestão de identidade e de acesso (IAM):

  • bigquery.datasets.get para conjuntos de dados.
  • bigquery.tables.getIamPolicy para tabelas e vistas.

Para mais informações sobre as autorizações do BigQuery, consulte o artigo Controlo de acesso com a IAM.

Esquema

Quando consulta a vista INFORMATION_SCHEMA.OBJECT_PRIVILEGES, os resultados da consulta contêm uma linha para cada associação de controlo de acesso de um recurso.

A vista 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. Este é NULL se o recurso em si for um conjunto de dados.
object_name STRING O nome da tabela, da vista ou do 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 da função, como roles/bigquery.dataEditor.
grantee STRING O tipo de utilizador e o utilizador ao qual a função é concedida.

Âmbito e sintaxe

As consultas nesta vista têm de incluir um qualificador de região. Um ID do projeto é opcional. Se não for especificado um ID do projeto, é usado o projeto no qual a consulta é executada. A tabela seguinte explica o âmbito da região para esta vista:

Nome da visualização de propriedade Âmbito do recurso Âmbito da região
[PROJECT_ID.]`region-REGION`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES Nível do projeto REGION
Substitua o seguinte:
  • Opcional: PROJECT_ID: o ID do seu projeto do Trusted Cloud Google Cloud. Se não for especificado, é usado o projeto predefinido.
  • 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 têm de conter uma cláusula WHERE que limite as consultas a um único conjunto de dados, tabela ou vista.
  • As consultas para obter metadados de controlo de acesso para um conjunto de dados têm de especificar o object_name.
  • As consultas para obter metadados de controlo de acesso para uma tabela ou uma vista têm de especificar object_name e object_schema.

Exemplos

O exemplo seguinte obtém todas as colunas da vista INFORMATION_SCHEMA.OBJECT_PRIVILEGES.

Para executar a consulta num projeto diferente do projeto no qual a consulta está a ser executada, adicione o ID do projeto à região no seguinte formato: `project_id`.`region_id`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES.

O exemplo seguinte obtém todos os metadados de controlo 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 devem ter o seguinte aspeto:

  +----------------+---------------+-------------+-------------+---------------------------+-----------------------------------+
  | 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 seguinte obtém todas as informações de controlo 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 devem ter o seguinte aspeto:

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

A vista INFORMATION_SCHEMA.OBJECT_PRIVILEGES mostra apenas as associações de controlo de acesso que estão definidas explicitamente. O primeiro exemplo mostra que o utilizador cloudysanfrancisco@gmail.com tem a função bigquery.dataOwner no conjunto de dados mydataset. O utilizador cloudysanfrancisco@gmail.com herda autorizações para criar, atualizar e eliminar tabelas em mydataset, incluindo a tabela testdata. No entanto, uma vez que essas autorizações não foram concedidas explicitamente na tabela testdata, não aparecem nos resultados do segundo exemplo.