@@ -3,63 +3,44 @@ package postgres
3
3
import (
4
4
"context"
5
5
"database/sql"
6
- "strings"
7
6
)
8
7
9
- var prepareDdlStatements = []string {
10
- "alter default privileges in schema public grant CHANGEME on tables to cloudsqliamuser;" ,
11
- "alter default privileges in schema public grant CHANGEME on sequences to cloudsqliamuser;" ,
12
- "grant CHANGEME on all tables in schema public to cloudsqliamuser;" ,
13
- "grant CHANGEME on all sequences in schema public to cloudsqliamuser;" ,
14
- }
15
-
16
- func PrepareAccess (ctx context.Context , appName , namespace , cluster , database string , allPrivs bool ) error {
17
- dbInfo , err := NewDBInfo (appName , namespace , cluster , database )
18
- if err != nil {
19
- return err
20
- }
21
-
22
- connectionInfo , err := dbInfo .DBConnection (ctx )
23
- if err != nil {
24
- return err
25
- }
26
-
27
- db , err := sql .Open ("cloudsqlpostgres" , connectionInfo .ConnectionString ())
28
- if err != nil {
29
- return err
30
- }
31
- defer db .Close ()
8
+ var grantAllPrivs = `ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO cloudsqliamuser;
9
+ ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO cloudsqliamuser;
10
+ GRANT ALL ON ALL TABLES IN SCHEMA public TO cloudsqliamuser;
11
+ GRANT ALL ON ALL SEQUENCES IN SCHEMA public TO cloudsqliamuser;
12
+ GRANT CREATE ON SCHEMA public TO cloudsqliamuser;`
32
13
33
- for _ , ddl := range prepareDdlStatements {
34
- _ , err = db .ExecContext (ctx , setGrant (ddl , allPrivs ))
35
- if err != nil {
36
- return err
37
- }
38
- }
14
+ var grantSelectPrivs = `ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO cloudsqliamuser;
15
+ ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON SEQUENCES TO cloudsqliamuser;
16
+ GRANT SELECT ON ALL TABLES IN SCHEMA public TO cloudsqliamuser;
17
+ GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO cloudsqliamuser;`
39
18
40
- return nil
41
- }
19
+ // this is used for all privileges and select, as it covers both cases
20
+ var revokeAllPrivs = `ALTER DEFAULT PRIVILEGES IN SCHEMA public REVOKE ALL ON TABLES FROM cloudsqliamuser;
21
+ ALTER DEFAULT PRIVILEGES IN SCHEMA public REVOKE ALL ON SEQUENCES FROM cloudsqliamuser;
22
+ REVOKE ALL ON ALL TABLES IN SCHEMA public FROM cloudsqliamuser;
23
+ REVOKE ALL ON ALL SEQUENCES IN SCHEMA public FROM cloudsqliamuser;
24
+ REVOKE CREATE ON SCHEMA public FROM cloudsqliamuser;`
42
25
43
- func setGrant (sql string , allPrivs bool ) string {
44
- sqlGrant := "SELECT"
26
+ func PrepareAccess (ctx context.Context , appName , namespace , cluster , database string , allPrivs bool ) error {
45
27
if allPrivs {
46
- sqlGrant = "ALL"
28
+ return sqlExecAsAppUser (ctx , appName , namespace , cluster , database , grantAllPrivs )
29
+ } else {
30
+ return sqlExecAsAppUser (ctx , appName , namespace , cluster , database , grantSelectPrivs )
47
31
}
48
- return strings .Replace (sql , "CHANGEME" , sqlGrant , 1 )
49
32
}
50
33
51
- var revokeDdlStatements = []string {
52
- "alter default privileges in schema public revoke ALL on tables from cloudsqliamuser;" ,
53
- "alter default privileges in schema public revoke ALL on sequences from cloudsqliamuser;" ,
54
- "revoke ALL on all tables in schema public from cloudsqliamuser;" ,
55
- "revoke ALL on all sequences in schema public from cloudsqliamuser;" ,
34
+ func RevokeAccess (ctx context.Context , appName , namespace , cluster , database string ) error {
35
+ return sqlExecAsAppUser (ctx , appName , namespace , cluster , database , revokeAllPrivs )
56
36
}
57
37
58
- func RevokeAccess (ctx context.Context , appName , namespace , cluster , database string ) error {
38
+ func sqlExecAsAppUser (ctx context.Context , appName , namespace , cluster , database , statement string ) error {
59
39
dbInfo , err := NewDBInfo (appName , namespace , cluster , database )
60
40
if err != nil {
61
41
return err
62
42
}
43
+
63
44
connectionInfo , err := dbInfo .DBConnection (ctx )
64
45
if err != nil {
65
46
return err
@@ -71,11 +52,9 @@ func RevokeAccess(ctx context.Context, appName, namespace, cluster, database str
71
52
}
72
53
defer db .Close ()
73
54
74
- for _ , ddl := range revokeDdlStatements {
75
- _ , err = db .ExecContext (ctx , ddl )
76
- if err != nil {
77
- return formatInvalidGrantError (err )
78
- }
55
+ _ , err = db .ExecContext (ctx , statement )
56
+ if err != nil {
57
+ return formatInvalidGrantError (err )
79
58
}
80
59
81
60
return nil
0 commit comments