|
1 | 1 | #!/bin/bash |
2 | 2 | set -e |
3 | 3 |
|
4 | | -# Check if POSTGRES_READONLY_USER and POSTGRES_READONLY_PASSWORD are defined |
| 4 | +# NOTE: POSTGRES_READONLY_USER and POSTGRES_READONLY_PASSWORD are optional |
5 | 5 | if [[ -z "${POSTGRES_READONLY_USER}" || -z "${POSTGRES_READONLY_PASSWORD}" ]]; then |
6 | 6 | echo "Skipping read-only user creation because POSTGRES_READONLY_USER or POSTGRES_READONLY_PASSWORD is not set." |
7 | 7 | exit 0 |
|
11 | 11 | readonly_user=${POSTGRES_READONLY_USER} |
12 | 12 | readonly_password=${POSTGRES_READONLY_PASSWORD} |
13 | 13 | database=${POSTGRES_DB} |
14 | | -schema=${SCHEMA:-public} |
| 14 | +schema=${SCHEMA:-public} # TODO: what is this??? |
15 | 15 |
|
16 | 16 | echo "Creating read-only user: $readonly_user" |
17 | 17 |
|
18 | | -# Create the read-only user and assign permissions |
19 | | -psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$database" <<-EOSQL |
20 | | - CREATE USER $readonly_user WITH PASSWORD '$readonly_password'; |
21 | | - GRANT CONNECT ON DATABASE $database TO $readonly_user; |
22 | | - GRANT USAGE ON SCHEMA $schema TO $readonly_user; |
23 | | - GRANT SELECT ON ALL TABLES IN SCHEMA $schema TO $readonly_user; |
24 | | - GRANT SELECT ON ALL SEQUENCES IN SCHEMA $schema TO $readonly_user; |
25 | | - ALTER DEFAULT PRIVILEGES IN SCHEMA $schema GRANT SELECT ON TABLES TO $readonly_user; |
26 | | -EOSQL |
| 18 | + |
| 19 | +# Check if the user already exists |
| 20 | +user_exists=$(psql -tAc "SELECT 1 FROM pg_roles WHERE rolname='$readonly_user'") |
| 21 | + |
| 22 | +if [[ $user_exists == "1" ]]; then |
| 23 | + echo "User '$readonly_user' already exists, skipping creation." |
| 24 | +else |
| 25 | + echo "Creating read-only user: $readonly_user" |
| 26 | + |
| 27 | + # Create the read-only user and assign permissions |
| 28 | + psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$database" <<-EOSQL |
| 29 | + CREATE USER $readonly_user WITH PASSWORD '$readonly_password'; |
| 30 | + GRANT CONNECT ON DATABASE $database TO $readonly_user; |
| 31 | + GRANT USAGE ON SCHEMA $schema TO $readonly_user; |
| 32 | + GRANT SELECT ON ALL TABLES IN SCHEMA $schema TO $readonly_user; |
| 33 | + GRANT SELECT ON ALL SEQUENCES IN SCHEMA $schema TO $readonly_user; |
| 34 | + ALTER DEFAULT PRIVILEGES IN SCHEMA $schema GRANT SELECT ON TABLES TO $readonly_user; |
| 35 | + EOSQL |
| 36 | +fi |
0 commit comments