Docker images for postgres extended with management bash scripts.
at main 41 lines 1.6 kB view raw
1#!/usr/bin/env bash 2 3 4### Creates a read only user. 5### 6### Usage: 7### $ docker-compose -f <environment>.yml (exec |run --rm) postgres createreaduser 8 9 10set -o errexit 11set -o nounset 12 13working_dir="$(dirname ${0})" 14source "${working_dir}/_sourced/constants.sh" 15source "${working_dir}/_sourced/messages.sh" 16 17if [ -z "$POSTGRES_READ_ONLY_USER" ] || [ -z "$POSTGRES_READ_ONLY_PASSWORD" ] ; then 18 message_error "The environment variables POSTGRES_READ_ONLY_USER and POSTGRES_READ_ONLY_PASSWORD should be configured." 19 exit 1 20fi 21 22export PGHOST="${POSTGRES_HOST}" 23export PGPORT="${POSTGRES_PORT}" 24export PGUSER="${POSTGRES_USER}" 25export PGPASSWORD="${POSTGRES_PASSWORD}" 26export PGDATABASE="${POSTGRES_DB}" 27 28message_info "Creating read only user for '${POSTGRES_DB}' database..." 29 30psql -tc "SELECT 1 FROM pg_catalog.pg_roles WHERE rolname = '${POSTGRES_READ_ONLY_USER}'" | grep -q 1 || psql -c "CREATE ROLE \"${POSTGRES_READ_ONLY_USER}\" WITH LOGIN PASSWORD '${POSTGRES_READ_ONLY_PASSWORD}' NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION VALID UNTIL 'infinity';" 31 32message_info "Grant permission to '${POSTGRES_READ_ONLY_USER}' user..." 33 34psql -v ON_ERROR_STOP=1 <<-EOSQL 35 GRANT CONNECT ON DATABASE ${POSTGRES_DB} TO "${POSTGRES_READ_ONLY_USER}"; 36 GRANT USAGE ON SCHEMA public TO "${POSTGRES_READ_ONLY_USER}"; 37 GRANT SELECT ON ALL TABLES IN SCHEMA public TO "${POSTGRES_READ_ONLY_USER}"; 38 GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO "${POSTGRES_READ_ONLY_USER}"; 39EOSQL 40 41message_success "The user '${POSTGRES_READ_ONLY_USER}' has been created with read-only permissions."