Created
September 21, 2021 21:49
-
-
Save jahrmando/60e2915925f7ef0bdbe5a6222f8382a3 to your computer and use it in GitHub Desktop.
Postgresql - Assign privileges to a user using GRANT command
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
usage() | |
{ | |
cat << EOF | |
usage: $0 options | |
OPTIONS: | |
-h Show this message | |
-d Database name | |
-r Hostname Database (default: localhost) | |
-p Port Database (default: 5432) | |
-u User Database (default: postgres) | |
-s Schema of Database (default: public) | |
-P Privileges (Comma separed string, Default: SELECT) | |
-z User name to apply Privileges | |
EOF | |
} | |
DB_NAME= | |
HOST_DB= | |
PORT_DB= | |
USER_DB= | |
PRIVS_DB= | |
PRIVS_USER= | |
SCHEMA_NAME= | |
while getopts "h:d:r:u:p:z:s:P:" OPTION | |
do | |
case $OPTION in | |
h) | |
usage | |
exit 1 | |
;; | |
d) | |
DB_NAME=$OPTARG | |
;; | |
r) | |
HOST_DB=$OPTARG | |
;; | |
u) | |
USER_DB=$OPTARG | |
;; | |
P) | |
PRIVS_DB=$OPTARG | |
;; | |
p) | |
PORT_DB=$OPTARG | |
;; | |
z) | |
PRIVS_USER=$OPTARG | |
;; | |
s) SCHEMA_NAME=$OPTARG | |
;; | |
esac | |
done | |
if [[ -z $DB_NAME ]] || [[ -z $PRIVS_USER ]] | |
then | |
usage | |
exit 1 | |
fi | |
HOST_DB=${HOST_DB:-localhost} | |
USER_DB=${USER_DB:-postgres} | |
PRIVS_DB=${PRIVS_DB:-"SELECT"} | |
SCHEMA_NAME=${SCHEMA_NAME:-"public"} | |
PORT_DB=${PORT_DB:-"5432"} | |
for tbl in `psql -p ${PORT_DB} -h ${HOST_DB} -U ${USER_DB} -qAt -c "select tablename from pg_tables where schemaname = '${SCHEMA_NAME}';" ${DB_NAME}` | |
do | |
psql -p ${PORT_DB} -h ${HOST_DB} -U ${USER_DB} -c "GRANT ${PRIVS_DB} ON TABLE \"${SCHEMA_NAME}\".\"${tbl}\" TO ${PRIVS_USER};" ${DB_NAME}; | |
echo "GRANT ${PRIVS_DB} ON: ${SCHEMA_NAME}.${tbl} TO ${PRIVS_USER}"; | |
sleep 1; | |
done | |
TABLES_PRIVS="select grantee, table_catalog, table_schema, table_name, privilege_type from information_schema.role_table_grants where grantee='${PRIVS_USER}' and table_catalog = '${DB_NAME}';" | |
psql -p ${PORT_DB} -h ${HOST_DB} -U ${USER_DB} -c "${TABLES_PRIVS}" ${DB_NAME}; | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment