Skip to content

Instantly share code, notes, and snippets.

@jahrmando
Created September 21, 2021 21:49
Show Gist options
  • Save jahrmando/60e2915925f7ef0bdbe5a6222f8382a3 to your computer and use it in GitHub Desktop.
Save jahrmando/60e2915925f7ef0bdbe5a6222f8382a3 to your computer and use it in GitHub Desktop.
Postgresql - Assign privileges to a user using GRANT command
#!/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