如何限制BigQuery用户使用DELETE语句删除表数据
BigQuery限制用户执行DELETE语句的实现方案
你提到的通过IAM模块配置权限条件的方案是可行的,以下是具体的实现路径和适用场景:
- 方案1:完全禁止用户执行DELETE DML语句
如果你需要完全拦截该用户的所有DELETE操作,在给用户分配带有bigquery.tables.updateData权限的角色(如数据编辑角色roles/bigquery.dataEditor)时,可附加IAM权限条件,条件表达式参考:
该表达式会不区分大小写匹配请求中的DELETE语句,命中后直接拒绝操作。需要注意:如果业务中存在包含DELETE逻辑的存储过程、动态SQL,也会被该规则拦截,你也可以根据业务需要调整正则规则,避免注释中出现DELETE关键词的正常查询被误拦截,配置前需提前做好业务侧的影响评估。!request.query.matches("(?i)\\bDELETE\\s+FROM\\b") - 方案2:限制DELETE操作的可删除范围
如果你不需要完全禁用DELETE,只是希望用户只能删除符合特定规则的行数据,可以使用行级安全(RLS)策略的DML控制能力,创建策略时指定仅作用于DELETE操作,通过过滤条件限制可删除的行:如果需要完全禁止该用户删数据,可直接设置永远不成立的过滤条件WHERE FALSE即可,相比IAM条件灵活度更高。 - 方案3:完全禁止所有数据修改操作
如果业务上该用户本身不需要做任何数据新增、修改、删除操作,可直接为其分配只读角色roles/bigquery.dataViewer,该角色默认不包含bigquery.tables.updateData权限,自然无法执行DELETE、INSERT、UPDATE等所有DML操作。
补充说明:你之前查阅的删除表/数据集的控制逻辑对应的是
bigquery.tables.delete、bigquery.datasets.delete权限,和本文提到的DELETE行数据的DML操作属于完全不同的权限体系,两者互不影响。
内容的提问来源于stack exchange,提问作者Julio
相关产品推荐
相关产品推荐

