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