@@ -3,39 +3,42 @@ package postgres
3
3
import (
4
4
"context"
5
5
"database/sql"
6
+ "strings"
7
+
8
+ "github.com/lib/pq"
6
9
)
7
10
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;`
11
+ var grantAllPrivs = `ALTER DEFAULT PRIVILEGES IN SCHEMA $schema GRANT ALL ON TABLES TO cloudsqliamuser;
12
+ ALTER DEFAULT PRIVILEGES IN SCHEMA $schema GRANT ALL ON SEQUENCES TO cloudsqliamuser;
13
+ GRANT ALL ON ALL TABLES IN SCHEMA $schema TO cloudsqliamuser;
14
+ GRANT ALL ON ALL SEQUENCES IN SCHEMA $schema TO cloudsqliamuser;
15
+ GRANT CREATE ON SCHEMA $schema TO cloudsqliamuser;`
13
16
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;`
17
+ var grantSelectPrivs = `ALTER DEFAULT PRIVILEGES IN SCHEMA $schema GRANT SELECT ON TABLES TO cloudsqliamuser;
18
+ ALTER DEFAULT PRIVILEGES IN SCHEMA $schema GRANT SELECT ON SEQUENCES TO cloudsqliamuser;
19
+ GRANT SELECT ON ALL TABLES IN SCHEMA $schema TO cloudsqliamuser;
20
+ GRANT SELECT ON ALL SEQUENCES IN SCHEMA $schema TO cloudsqliamuser;`
18
21
19
22
// 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;`
23
+ var revokeAllPrivs = `ALTER DEFAULT PRIVILEGES IN SCHEMA $schema REVOKE ALL ON TABLES FROM cloudsqliamuser;
24
+ ALTER DEFAULT PRIVILEGES IN SCHEMA $schema REVOKE ALL ON SEQUENCES FROM cloudsqliamuser;
25
+ REVOKE ALL ON ALL TABLES IN SCHEMA $schema FROM cloudsqliamuser;
26
+ REVOKE ALL ON ALL SEQUENCES IN SCHEMA $schema FROM cloudsqliamuser;
27
+ REVOKE CREATE ON SCHEMA $schema FROM cloudsqliamuser;`
25
28
26
- func PrepareAccess (ctx context.Context , appName , namespace , cluster string , allPrivs bool ) error {
29
+ func PrepareAccess (ctx context.Context , appName , namespace , cluster , schema string , allPrivs bool ) error {
27
30
if allPrivs {
28
- return sqlExecAsAppUser (ctx , appName , namespace , cluster , grantAllPrivs )
31
+ return sqlExecAsAppUser (ctx , appName , namespace , cluster , schema , grantAllPrivs )
29
32
} else {
30
- return sqlExecAsAppUser (ctx , appName , namespace , cluster , grantSelectPrivs )
33
+ return sqlExecAsAppUser (ctx , appName , namespace , cluster , schema , grantSelectPrivs )
31
34
}
32
35
}
33
36
34
- func RevokeAccess (ctx context.Context , appName , namespace , cluster string ) error {
35
- return sqlExecAsAppUser (ctx , appName , namespace , cluster , revokeAllPrivs )
37
+ func RevokeAccess (ctx context.Context , appName , namespace , cluster , schema string ) error {
38
+ return sqlExecAsAppUser (ctx , appName , namespace , cluster , schema , revokeAllPrivs )
36
39
}
37
40
38
- func sqlExecAsAppUser (ctx context.Context , appName , namespace , cluster , statement string ) error {
41
+ func sqlExecAsAppUser (ctx context.Context , appName , namespace , cluster , schema , statement string ) error {
39
42
dbInfo , err := NewDBInfo (appName , namespace , cluster )
40
43
if err != nil {
41
44
return err
@@ -46,6 +49,8 @@ func sqlExecAsAppUser(ctx context.Context, appName, namespace, cluster, statemen
46
49
return err
47
50
}
48
51
52
+ schema = pq .QuoteIdentifier (schema )
53
+ statement = strings .ReplaceAll (statement , "$schema" , schema )
49
54
db , err := sql .Open ("cloudsqlpostgres" , connectionInfo .ProxyConnectionString ())
50
55
if err != nil {
51
56
return err
0 commit comments