PostgreSQL でユーザを追加して権限を与える方法

概略

  • 2段階の操作があります
    • まずユーザ(ロール)を作成する*1
    • その後に権限を付与する*2

PostgreSQL にログインする

  • -d db_nameの名称には、ユーザ(ロール)や権限を扱いたいデータベース名を指定すること
$ psql -U postgres -d postgres                                                            
psql (9.6.1)
"help" でヘルプを表示します.

postgres=#

ユーザ(ロール)を作成し、ユーザ単位での(仮)権限を与える

postgres=# CREATE ROLE username WITH LOGIN PASSWORD 'password';
  • この段階でたとえば以下のデータベースレベルの権限が付与できる
    • SUPERUSER / NOSUPERUSER
    • CREATEDB / NOCREATEDB
    • CREATEROLE / NOCREATEROLE
    • CREATEUSER / NOCREATEUSER
    • LOGIN / NOLOGIN
  • 上記の例では LOGIN の権限を与えている
    • 並列して書くことで他の権限も付与できる
    • 与えられる権限はたくさんある

ALTER で任意の権限を与える

  • CREATE したあとで ALTER で権限を付与するのがよい粒度かとは思う
    • ALTER ROLE target_username WITH SUPERUSER;

補足: スキーマ(テーブル)単位で権限を付与する

スキーマ(テーブル)単位でも権限を付与することができます(任意)。

postgres=# GRANT 権限名 ON schema_name.table_name TO username;
  • 主な権限名は以下のとおり

    • SELECT
    • INSERT
    • UPDATE
    • DELETE
    • CREATE
    • USAGE
  • 未解決点

    • 既に存在するテーブルごとにしか権限を与えられない?
    • スキーマ内のどこか一つのテーブルに権限を与えると、同じデータベース上の全てのスキーマ内のテーブルについて SELECT の権限が付与される?

権限の剥奪(参考)

postgres=# REVOKE 権限名 ON schema_name.table_name FROM username;

ユーザ(ロール)の変更(参考)

postgres=# ALTER ROLE usename WITH PASSWORD 'new_password';

ユーザ(ロール)の削除(参考)

postgres=# DROP ROLE username;

ユーザ一覧の確認をする(参考)

postgres=# \du

ユーザの権限の確認をする(参考)

postgres=# \dp

参考にしたサイト

*1:CREATE コマンド

*2:ALTER コマンド

Powered by はてなブログ