OBJECT_PRIVILEGES ビュー

INFORMATION_SCHEMA.OBJECT_PRIVILEGES ビューには、BigQuery オブジェクトに明示的に設定されているアクセス制御バインディングに関するメタデータが含まれています。このビューには、継承されたアクセス制御バインディングに関するメタデータは含まれていません。

必要な権限

INFORMATION_SCHEMA.OBJECT_PRIVILEGES ビューをクエリするには、次の Identity and Access Management(IAM)権限が必要です。

  • データセットに対する bigquery.datasets.get
  • テーブルとビューに対する bigquery.tables.getIamPolicy

BigQuery の権限の詳細については、IAM でのアクセス制御をご覧ください。

スキーマ

INFORMATION_SCHEMA.OBJECT_PRIVILEGES ビューにクエリを実行すると、リソースのアクセス制御のバインディングごとに 1 行ずつ表示されるクエリ結果が返されます。

INFORMATION_SCHEMA.OBJECT_PRIVILEGES ビューのスキーマは次のとおりです。

列名 データ型
OBJECT_CATALOG STRING リソースを含むプロジェクトのプロジェクト ID。
OBJECT_SCHEMA STRING リソースを含むデータセットの名前。リソース自体がデータセットの場合は NULL です。
OBJECT_NAME STRING ポリシーが適用されるテーブル、ビュー、またはデータセットの名前。
OBJECT_TYPE STRING リソースタイプ(SCHEMA(データセット)、TABLEVIEWEXTERNAL など)。
PRIVILEGE_TYPE STRING ロールの ID(roles/bigquery.dataEditor など)。
GRANTEE STRING ロールが付与されるユーザータイプとユーザー。

スコープと構文

このビューに対するクエリでは、リージョン修飾子を指定する必要があります。プロジェクト ID は省略可能です。プロジェクト ID を指定しないと、クエリが実行されるプロジェクトが使用されます。次の表に、このビューのリージョン スコープを示します。

ビュー名 リソース スコープ リージョン スコープ
[PROJECT_ID.]`region-REGION`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES プロジェクト レベル REGION
次のように置き換えます。

  • 省略可: PROJECT_ID: Google Cloud プロジェクトの ID。指定しない場合は、デフォルトのプロジェクトが使用されます。
+ REGION: 任意のデータセット リージョン名。 例: region-us

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

制限事項

  • OBJECT_PRIVILEGES クエリには、クエリを単一のデータセット、テーブル、ビューに限定する WHERE 句を含める必要があります。
  • データセットのアクセス制御のメタデータを取得するクエリでは、object_name を指定する必要があります。
  • テーブルまたはビューのアクセス制御のメタデータを取得するクエリでは、object_nameobject_schema の両方を指定する必要があります。

次の例では、INFORMATION_SCHEMA.OBJECT_PRIVILEGES ビューからすべての列を取得しています。

クエリが実行されているプロジェクト以外のプロジェクトに対してクエリを実行するには、形式 `project_id`.`region_id`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES でプロジェクト ID をリージョンに追加します。

次の例では、mycompany プロジェクトにある mydataset データセットのすべてのアクセス制御のメタデータを取得します。

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

結果は次のようになります。

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

次の例では、mydataset データセット内にある testdata テーブルのすべてのアクセス制御の情報を取得します。

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

結果は次のようになります。

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

INFORMATION_SCHEMA.OBJECT_PRIVILEGES ビューには、明示的に設定されたアクセス制御バインディングのみが表示されます。最初の例では、ユーザー cloudysanfrancisco@gmail.commydataset データセットに対して bigquery.dataOwner ロールを保持していることを示しています。ユーザー cloudysanfrancisco@gmail.com は、mydataset 内のテーブル(testdata テーブルを含む)の作成、更新、削除の権限を継承します。ただし、これらの権限は testdata テーブルで明示的に付与されていないため、2 番目の例の結果には表示されません。