その他
    ホーム技術発信DoRubypostgresでのユーザ権限付与(psql, grant)

    postgresでのユーザ権限付与(psql, grant)

    この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

    おはようございます。tacchiです。

    今日は、postgresでの権限付与について、話したいと思います。
    スキーマ単位で権限付与できず、テーブル毎に権限付与しなきゃならないので、テーブル数が増えている場合のDBにユーザ作成して権限付与するのが面倒になってきますよね。
    テーブルリストを作成してそのリストに対して、同じgrant文を流すスクリプトを組んだので、良ければ使ってみて下さい。
    ## 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’

    う。。。 インデントが崩れてる。。。