-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmaterialized-views.tf
85 lines (73 loc) · 2.54 KB
/
materialized-views.tf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
locals {
materialized_view_ownership = flatten([
for database, grants in local.databases : [
for role in grants.roles : {
unique = join("_", [database, trimspace(role)])
database = database
role = upper(join("_", [local.object_prefix, database, role]))
privilege = sort([for p in setintersection(local.permissions_per_type[role].materialized_views, ["ownership"]) : upper(p)])
} if contains(local.permissions_per_type[role].materialized_views, "ownership")
]
])
materialized_view_grants_wo_ownership = [
for grant in flatten([
for database, grants in local.databases : [
for role in grants.roles : {
unique = join("_", [database, trimspace(role)])
database = database
role = upper(join("_", [local.object_prefix, database, role]))
privilege = sort([for p in setsubtract(local.permissions_per_type[role].materialized_views, ["ownership"]) : upper(p)])
}
]
]) : grant if length(grant.privilege) > 0
]
}
resource "snowflake_grant_privileges_to_account_role" "future_materialized_views" {
for_each = {
for uni in local.materialized_view_grants_wo_ownership : uni.unique => uni
}
provider = snowflake.securityadmin
account_role_name = each.value.role
privileges = each.value.privilege
on_schema_object {
future {
object_type_plural = "MATERIALIZED VIEWS"
in_database = snowflake_database.database[each.value.database].id
}
}
depends_on = [
snowflake_grant_ownership.materialized_views
]
}
resource "snowflake_grant_privileges_to_account_role" "all_materialized_views" {
for_each = {
for uni in local.materialized_view_grants_wo_ownership : uni.unique => uni
}
provider = snowflake.securityadmin
account_role_name = each.value.role
privileges = each.value.privilege
always_apply = var.always_apply
on_schema_object {
all {
object_type_plural = "MATERIALIZED VIEWS"
in_database = snowflake_database.database[each.value.database].id
}
}
depends_on = [
snowflake_grant_ownership.materialized_views
]
}
resource "snowflake_grant_ownership" "materialized_views" {
for_each = {
for uni in local.materialized_view_ownership : uni.unique => uni
}
provider = snowflake.securityadmin
account_role_name = each.value.role
outbound_privileges = "REVOKE"
on {
future {
object_type_plural = "MATERIALIZED VIEWS"
in_database = snowflake_database.database[each.value.database].id
}
}
}