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(データセット)、TABLE、VIEW、EXTERNALなど)。 | 
| 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_nameとobject_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.com が mydataset データセットに対して bigquery.dataOwner ロールを保持していることを示しています。ユーザー cloudysanfrancisco@gmail.com は、mydataset 内のテーブル(testdata テーブルを含む)の作成、更新、削除の権限を継承します。ただし、これらの権限は testdata テーブルで明示的に付与されていないため、2 番目の例の結果には表示されません。