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 番目の例の結果には表示されません。