You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 04:30:17