一括grant!!

こんにちは
今回は、Postgresのユーザ作成方法を記載します。

 su - postgres
 createuser hogehoge

次に作成したユーザに対して権限付与を行うわけですが、テーブル数が多くなったDBのユーザに対する権限付与は、テーブル単位での権限付与となるので非常に面倒くさい。
なので、スクリプトを組んでみました。

お役に立つか分からないですが、参考までにどうぞ。。。

## grant.sh
#!/bin/sh
DBNAME=${1:?"enter dbname"}
DB_USERNAME=${2:?"enter db username"}
CREATE_USERNAME=${3:?"enter create username"}
COMMAND=${4:?"enter select or 'select,update' or 'select,update,delete' ..."}

# --共通関数定義--
LIST=/tmp/table.lst

# リスト作成
psql -U ${DB_USERNAME} -d ${DBNAME} -c "select relname from pg_class where relkind='r' and relnamespace=(select oid from pg_namespace where nspname='public' order by relpages desc);" -t -A > ${LIST}

# コマンド実行
while read line
do
    echo psql -U ${DB_USERNAME} -d ${DBNAME} -c \"grant ${COMMAND} on $line to ${CREATE_USERNAME}\;\"
    psql -U ${DB_USERNAME} -d ${DBNAME} -c "grant ${COMMAND} on $line to ${CREATE_USERNAME};"
done < ${LIST}

# listファイル削除
rm -f ${LIST}

exit 0

上記スクリプト実行方法は以下の通り

/grant.sh dbname db_username create_username 'select'
./grant.sh dbname db_username create_username 'select,update,delete'