|
8 | 8 | "bytes"
|
9 | 9 | "context"
|
10 | 10 | "encoding/json"
|
| 11 | + "fmt" |
11 | 12 | "strings"
|
12 | 13 |
|
13 | 14 | pg_query "github.com/pganalyze/pg_query_go/v6"
|
@@ -271,26 +272,28 @@ func grantUserAccessToPublicSchemaInPostgreSQL(ctx context.Context, exec Executo
|
271 | 272 |
|
272 | 273 | databases, _ := json.Marshal(user.Databases)
|
273 | 274 |
|
| 275 | + // Format the username as an identifier |
| 276 | + username := fmt.Sprintf(`"%s"`, user.Name) |
| 277 | + |
274 | 278 | stdout, stderr, err := exec.ExecInDatabasesFromQuery(ctx,
|
275 | 279 | sql.String(),
|
276 | 280 | strings.Join([]string{
|
277 | 281 | // Quiet NOTICE messages from IF EXISTS statements.
|
278 | 282 | `SET client_min_messages = WARNING;`,
|
279 | 283 |
|
280 | 284 | // Grant all privileges on the public schema to the user
|
281 |
| - `GRANT ALL PRIVILEGES ON SCHEMA public TO :"username";`, |
| 285 | + fmt.Sprintf(`GRANT ALL PRIVILEGES ON SCHEMA public TO %s;`, username), |
282 | 286 |
|
283 | 287 | // Grant all privileges on existing tables and sequences in the public schema
|
284 |
| - `GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO :"username";`, |
285 |
| - `GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO :"username";`, |
| 288 | + fmt.Sprintf(`GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO %s;`, username), |
| 289 | + fmt.Sprintf(`GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO %s;`, username), |
286 | 290 |
|
287 | 291 | // Set default privileges for future objects created in the public schema
|
288 |
| - `ALTER DEFAULT PRIVILEGES FOR ROLE "username" IN SCHEMA public GRANT ALL PRIVILEGES ON TABLES TO "username";`, |
289 |
| - `ALTER DEFAULT PRIVILEGES FOR ROLE "username" IN SCHEMA public GRANT ALL PRIVILEGES ON SEQUENCES TO "username";`, |
| 292 | + fmt.Sprintf(`ALTER DEFAULT PRIVILEGES FOR ROLE %s IN SCHEMA public GRANT ALL PRIVILEGES ON TABLES TO %s;`, username, username), |
| 293 | + fmt.Sprintf(`ALTER DEFAULT PRIVILEGES FOR ROLE %s IN SCHEMA public GRANT ALL PRIVILEGES ON SEQUENCES TO %s;`, username, username), |
290 | 294 | }, "\n"),
|
291 | 295 | map[string]string{
|
292 | 296 | "databases": string(databases),
|
293 |
| - "username": string(user.Name), |
294 | 297 | "ON_ERROR_STOP": "on", // Abort when any one statement fails.
|
295 | 298 | "QUIET": "on", // Do not print successful commands to stdout.
|
296 | 299 | },
|
|
0 commit comments