Skip to content

Commit 0a46643

Browse files
authored
Grant permissions to sequences as well (#12)
* Grant permissions to sequences as well * Move * No references for sequences * No truncate for sequences * Fix sequence perms
1 parent 05fc86f commit 0a46643

File tree

2 files changed

+71
-5
lines changed

2 files changed

+71
-5
lines changed

locals.tf

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ locals {
3030
privileges_ro = [
3131
"SELECT",
3232
]
33-
privileges_rw = [
33+
privileges_rw_tables = [
3434
"DELETE",
3535
"INSERT",
3636
"REFERENCES",
@@ -39,4 +39,9 @@ locals {
3939
"TRUNCATE",
4040
"UPDATE",
4141
]
42+
privileges_rw_sequences = [
43+
"SELECT",
44+
"UPDATE",
45+
"USAGE",
46+
]
4247
}

roles.tf

Lines changed: 65 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ resource "postgresql_role" "role_ro" {
7575
statement_timeout = 0
7676
}
7777

78-
resource "postgresql_default_privileges" "role_ro" {
78+
resource "postgresql_default_privileges" "role_ro_table" {
7979
for_each = {
8080
for database_writer in local.databases_writers : "${database_writer.database}.${database_writer.role}" => database_writer
8181
}
@@ -88,6 +88,19 @@ resource "postgresql_default_privileges" "role_ro" {
8888
privileges = local.privileges_ro
8989
}
9090

91+
resource "postgresql_default_privileges" "role_ro_sequence" {
92+
for_each = {
93+
for database_writer in local.databases_writers : "${database_writer.database}.${database_writer.role}" => database_writer
94+
}
95+
96+
role = postgresql_role.role_ro[each.value.database].name
97+
database = each.value.database
98+
owner = each.value.role
99+
schema = "public"
100+
object_type = "sequence"
101+
privileges = local.privileges_ro
102+
}
103+
91104
resource "postgresql_grant" "role_ro_table" {
92105
for_each = local.databases
93106

@@ -100,6 +113,18 @@ resource "postgresql_grant" "role_ro_table" {
100113
with_grant_option = false
101114
}
102115

116+
resource "postgresql_grant" "role_ro_sequence" {
117+
for_each = local.databases
118+
119+
role = postgresql_role.role_ro[each.value].name
120+
database = each.value
121+
schema = "public"
122+
object_type = "sequence"
123+
privileges = local.privileges_ro
124+
objects = []
125+
with_grant_option = false
126+
}
127+
103128
resource "postgresql_grant" "role_ro_schema" {
104129
for_each = local.databases
105130

@@ -133,7 +158,7 @@ resource "postgresql_role" "role_rw" {
133158
statement_timeout = 0
134159
}
135160

136-
resource "postgresql_default_privileges" "role_rw" {
161+
resource "postgresql_default_privileges" "role_rw_table" {
137162
for_each = {
138163
for database_writer in local.databases_writers : "${database_writer.database}.${database_writer.role}" => database_writer
139164
}
@@ -143,7 +168,20 @@ resource "postgresql_default_privileges" "role_rw" {
143168
owner = each.value.role
144169
schema = "public"
145170
object_type = "table"
146-
privileges = local.privileges_rw
171+
privileges = local.privileges_rw_tables
172+
}
173+
174+
resource "postgresql_default_privileges" "role_rw_sequence" {
175+
for_each = {
176+
for database_writer in local.databases_writers : "${database_writer.database}.${database_writer.role}" => database_writer
177+
}
178+
179+
role = postgresql_role.role_rw[each.value.database].name
180+
database = each.value.database
181+
owner = each.value.role
182+
schema = "public"
183+
object_type = "sequence"
184+
privileges = local.privileges_rw_sequences
147185
}
148186

149187
resource "postgresql_grant" "role_rw_table" {
@@ -153,7 +191,19 @@ resource "postgresql_grant" "role_rw_table" {
153191
database = each.value
154192
schema = "public"
155193
object_type = "table"
156-
privileges = local.privileges_rw
194+
privileges = local.privileges_rw_tables
195+
objects = []
196+
with_grant_option = false
197+
}
198+
199+
resource "postgresql_grant" "role_rw_sequence" {
200+
for_each = local.databases
201+
202+
role = postgresql_role.role_rw[each.value].name
203+
database = each.value
204+
schema = "public"
205+
object_type = "sequence"
206+
privileges = local.privileges_rw_sequences
157207
objects = []
158208
with_grant_option = false
159209
}
@@ -168,3 +218,14 @@ resource "postgresql_grant" "role_rw_schema" {
168218
privileges = ["CREATE", "USAGE"]
169219
with_grant_option = false
170220
}
221+
222+
223+
moved {
224+
from = postgresql_default_privileges.role_ro
225+
to = postgresql_default_privileges.role_ro_table
226+
}
227+
228+
moved {
229+
from = postgresql_default_privileges.role_rw
230+
to = postgresql_default_privileges.role_rw_table
231+
}

0 commit comments

Comments
 (0)