Skip to content

Commit bdb31c7

Browse files
committed
1 parent 9547812 commit bdb31c7

File tree

3 files changed

+21
-7
lines changed

3 files changed

+21
-7
lines changed

pkg/controller/postgres/postgres_controller.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -220,12 +220,12 @@ func (r *ReconcilePostgres) Reconcile(request reconcile.Request) (_ reconcile.Re
220220
}
221221

222222
// Set privileges on schema
223-
err = r.pg.SetSchemaPrivileges(database, owner, reader, schema, readerPrivs, reqLogger)
223+
err = r.pg.SetSchemaPrivileges(database, owner, reader, schema, readerPrivs, false, reqLogger)
224224
if err != nil {
225225
reqLogger.Error(err, fmt.Sprintf("Could not give %s permissions \"%s\"", reader, readerPrivs))
226226
continue
227227
}
228-
err = r.pg.SetSchemaPrivileges(database, owner, writer, schema, writerPrivs, reqLogger)
228+
err = r.pg.SetSchemaPrivileges(database, owner, writer, schema, writerPrivs, true, reqLogger)
229229
if err != nil {
230230
reqLogger.Error(err, fmt.Sprintf("Could not give %s permissions \"%s\"", writer, writerPrivs))
231231
continue

pkg/postgres/database.go

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,12 @@ const (
1414
ALTER_DB_OWNER = `ALTER DATABASE "%s" OWNER TO "%s"`
1515
DROP_DATABASE = `DROP DATABASE "%s"`
1616
GRANT_USAGE_SCHEMA = `GRANT USAGE ON SCHEMA "%s" TO "%s"`
17+
GRANT_CREATE_TABLE = `GRANT CREATE ON SCHEMA "%s" TO "%s"`
1718
GRANT_ALL_TABLES = `GRANT %s ON ALL TABLES IN SCHEMA "%s" TO "%s"`
1819
DEFAULT_PRIVS_SCHEMA = `ALTER DEFAULT PRIVILEGES FOR ROLE "%s" IN SCHEMA "%s" GRANT %s ON TABLES TO "%s"`
19-
REVOKE_CONNECT = `REVOKE CONNECT ON DATABASE "%s" FROM public`
20-
TERMINATE_BACKEND = `SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = '%s' AND pid <> pg_backend_pid()`
21-
GET_DB_OWNER = `SELECT pg_catalog.pg_get_userbyid(d.datdba) FROM pg_catalog.pg_database d WHERE d.datname = '%s'`
20+
REVOKE_CONNECT = `REVOKE CONNECT ON DATABASE "%s" FROM public`
21+
TERMINATE_BACKEND = `SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = '%s' AND pid <> pg_backend_pid()`
22+
GET_DB_OWNER = `SELECT pg_catalog.pg_get_userbyid(d.datdba) FROM pg_catalog.pg_database d WHERE d.datname = '%s'`
2223
GRANT_CREATE_SCHEMA = `GRANT CREATE ON DATABASE "%s" TO "%s"`
2324
)
2425

@@ -40,6 +41,12 @@ func (c *pg) CreateDB(dbname, role string) error {
4041
if err != nil {
4142
return err
4243
}
44+
45+
_, err = c.db.Exec(fmt.Sprintf(GRANT_CREATE_TABLE, "public", role))
46+
if err != nil {
47+
return err
48+
}
49+
4350
return nil
4451
}
4552

@@ -94,7 +101,7 @@ func (c *pg) CreateExtension(db, extension string, logger logr.Logger) error {
94101
return nil
95102
}
96103

97-
func (c *pg) SetSchemaPrivileges(db, creator, role, schema, privs string, logger logr.Logger) error {
104+
func (c *pg) SetSchemaPrivileges(db, creator, role, schema, privs string, createSchema bool, logger logr.Logger) error {
98105
tmpDb, err := GetConnection(c.user, c.pass, c.host, db, c.args, logger)
99106
if err != nil {
100107
return err
@@ -118,5 +125,12 @@ func (c *pg) SetSchemaPrivileges(db, creator, role, schema, privs string, logger
118125
if err != nil {
119126
return err
120127
}
128+
// Grant role usage on schema if createSchema
129+
if createSchema {
130+
_, err = tmpDb.Exec(fmt.Sprintf(GRANT_CREATE_TABLE, schema, role))
131+
if err != nil {
132+
return err
133+
}
134+
}
121135
return nil
122136
}

pkg/postgres/postgres.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ type PG interface {
1616
CreateUserRole(role, password string) (string, error)
1717
UpdatePassword(role, password string) error
1818
GrantRole(role, grantee string) error
19-
SetSchemaPrivileges(db, creator, role, schema, privs string, logger logr.Logger) error
19+
SetSchemaPrivileges(db, creator, role, schema, privs string, createSchema bool, logger logr.Logger) error
2020
RevokeRole(role, revoked string) error
2121
AlterDefaultLoginRole(role, setRole string) error
2222
DropDatabase(db string, logger logr.Logger) error

0 commit comments

Comments
 (0)