如何列出BigQuery数据集/表的用户角色及权限(含继承权限)
BigQuery 非控制台获取数据集、表全量权限(含继承权限)实现方案
bq show 'dataset_name'仅能返回数据集/表层面直接绑定的IAM角色与权限,无法展示从组织、文件夹、项目层级继承的权限。无需登录控制台,通过bq命令行或原生SQL即可拉取包含继承关系的全量权限,具体实现方式如下:
方案1:通过bq命令行获取全量有效权限
不要使用bq show,改用bq get-iam-policy子命令搭配有效权限参数,即可拉取包含继承权限的完整IAM策略:
- 查询数据集全量权限(含继承):
bq get-iam-policy --effective --format=prettyjson 你的项目ID:目标数据集名 - 查询指定表全量权限(含继承):
bq get-iam-policy --effective --format=prettyjson 你的项目ID:目标数据集名.目标表名
返回结果中会明确区分每条权限绑定的来源:直接绑定在当前资源的权限会归类在资源自身的bindings节点下,继承自上级层级的权限会标注对应的上层资源节点,不会遗漏继承获得的角色。如果不需要格式化易读输出,去掉--format=prettyjson参数即可返回原始JSON结构。
方案2:通过BigQuery SQL查询全量权限
直接查询BigQuery内置的INFORMATION_SCHEMA有效权限视图即可,视图返回结果默认包含所有继承权限,还自带字段标记权限是否为继承获得:
- 查指定数据集下所有表的全量权限(含继承):
SELECT table_name, grantee, -- 被授权的主体(用户、服务账号、用户组) privilege_type, -- 对应的权限类型 is_inherited -- 权限来源标记:TRUE=继承自上层资源,FALSE=直接绑定在当前表 FROM `你的项目ID.资源所在区域.INFORMATION_SCHEMA.EFFECTIVE_TABLE_PRIVILEGES` WHERE table_schema = '目标数据集名';
- 查数据集本身的全量权限(含继承):
SELECT schema_name, grantee, privilege_type, is_inherited FROM `你的项目ID.资源所在区域.INFORMATION_SCHEMA.EFFECTIVE_SCHEMA_PRIVILEGES` WHERE schema_name = '目标数据集名';
注意:执行上述命令或SQL前,需要确保当前使用的账号拥有目标资源的IAM策略查看权限(对应权限点为
bigquery.datasets.getIamPolicy、bigquery.tables.getIamPolicy),同时拥有上级项目/文件夹/组织的IAM查看权限,否则无法拉取完整的继承权限数据。SQL中的资源所在区域需替换为数据集/表实际部署的区域,例如多区域美区填region-us,单区域华东2填region-asia-east2。
内容的提问来源于stack exchange,提问作者Mayur7771
相关产品推荐
相关产品推荐

