如何通过Terraform为Snowflake某Schema下所有视图授予SELECT权限?
解决Snowflake PRODUCTION schema所有视图的SELECT权限授权问题
报错提示很明确:snowflake_view_grant 资源必须指定 view_name,除非设置 on_future = true 来针对未来创建的视图。要实现给当前schema下所有已存在视图授权,需要结合数据源循环处理,以下分场景给出方案:
1. 给现有所有视图授权
先用 snowflake_views 数据源拉取PRODUCTION schema下的所有视图,再通过 for_each 逐个创建授权:
# 获取PRODUCTION schema下的所有视图列表 data "snowflake_views" "prod_all_views" { provider = snowflake.security_admin database_name = snowflake_database.prod_db.name schema_name = "PRODUCTION" } # 循环为每个视图授予SELECT权限 resource "snowflake_view_grant" "prod_existing_view_select" { provider = snowflake.security_admin for_each = data.snowflake_views.prod_all_views.views database_name = snowflake_database.prod_db.name schema_name = "PRODUCTION" view_name = each.value.name privilege = "SELECT" roles = [ snowflake_role.role_1.name, snowflake_role.role_2.name, snowflake_role.role_3.name ] with_grant_option = false }
2. 给未来新增视图自动授权
如果需要让之后在PRODUCTION schema创建的视图自动获得该权限,只需开启 on_future = true,无需指定 view_name:
resource "snowflake_view_grant" "prod_future_view_select" { provider = snowflake.security_admin database_name = snowflake_database.prod_db.name schema_name = "PRODUCTION" privilege = "SELECT" roles = [ snowflake_role.role_1.name, snowflake_role.role_2.name, snowflake_role.role_3.name ] with_grant_option = false on_future = true }
3. 同时覆盖现有和未来视图
把上述两个资源组合使用,就能实现当前所有视图和未来新增视图的全量授权。
注意:执行前确保你的Terraform使用的角色拥有读取该schema视图列表的权限。
内容的提问来源于stack exchange,提问作者Hari
相关产品推荐
相关产品推荐

