概略
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