概要
PostgreSQLで複数のユーザーやグループがデータベースを利用するにあたり、そのアクセス権限を取り決めて設定する必要がある。その際に設定するロールというものについてまとめる。
PostgreSQLのロールとは
PostgreSQLのロールとは、ユーザやグループがデータベースへアクセスすることを管理するための仕組みの事。ロールには名前が付けられ、データベース・オブジェクト(テーブルや関数など)を所有し、他のロールからのアクセスを制限する権限を持つ。最初にPostgreSQL が立ち上がるとpostgresという名前のロールが作成されている。(これがスーパーユーザ。)
それで、postgresという名前のロールから他のロールに与える権限の管理を行う。
ロールの作成
新しくロールを作成する
CREATE ROLE 名前;
コマンドプロンプトからcreateする
createuser 名前;
ロールの属性
ロールの属性とは、ロールの権限を決めたり認証を行なうためのデータを設定したりするための属性のこと。
ログイン権限
ログイン権限とはデータベースに接続することを可能にする権限のこと。ログイン権限を持つロールの名前を使ってデータベースに接続する。
CREATE ROLE 名前 LOGIN;
もしくは
CREATE USER 名前;
*CREATE USERで作成されたロールはログイン属性を持つが、CREATE ROLEだけではログイン属性は付かないので注意が必要。
また、ロールの属性を変更したい時は、ALTER ROLE SQLコマンドを使用する。
権限を与えるなら、
ALTER ROLE 名前 LOGIN;
一方、権限を取り去るには、
ALTER ROLE 名前 NOLOGIN;
とコマンドを叩けばOKだ。
スーパーユーザ状態
スーパーユーザ状態はログイン以外に何でもできる権限をロールに与える。便利だが危険な場合もあるので、通常の操作ではスーパーユーザではない目的に応じたロールを使用することが推奨される。
このロールを作成するためのSQLコマンド
CREATE ROLE 名前 SUPERUSER;
ロールの属性を変更したい時は、ALTER ROLE SQLコマンドを使用する。
権限を与えるなら、
ALTER ROLE 名前 SUPERUSER;
権限を取り去るには、
ALTER ROLE 名前 NOSUPERUSER;
データベース作成
データベース作成はデータベースを作成する権限をロールに与える。
CREATE ROLE 名前 CREATEDB;
また、ロールの属性を変更したい時は、ALTER ROLE SQLコマンドを使用する。
権限を与えるなら、
ALTER ROLE 名前 CREATEDB;
権限を取り去るには、
ALTER ROLE 名前 NOCREATEDB;
ロール作成
ロール作成はロールを作成する権限をロールに与える。
CREATE ROLE 名前 CREATEROLE;
また、ロールの属性を変更したい時は、ALTER ROLE SQLコマンドを使用する。
ALTER ROLE 名前 CREATEROLE;
権限を取り去るには
ALTER ROLE 名前 NOCREATEROLE;
注意しなければならない点もある。ロール作成の権限ではロールを変更したり削除したりすることはできない。これらはスーパーユーザでなければできない.
パスワード
パスワードはロールがデータベースに接続する時に要求される場合に必要な属性である。
CREATE ROLE 名前 PASSWORD 'パスワード';
また、ロールの属性を変更したい時は、ALTER ROLE SQLコマンドを使用する。
権限を与えるなら、
ALTER ROLE 名前 PASSWORD 'パスワード';
権限を取り去るには、
ALTER ROLE 名前PASSWORD NULL;
権限
権限とは、ユーザがテーブルや関数などデータベースのオブジェクトを使用するためにロールに与えられるもの。オブジェクトが作成されると、そのオブジェクトの所有者が決まる。その所有者はオブジェクトを作成したロールだ。また、その所有者はオブジェクトに対してほとんどの権限を持つことになる。しかし、他のロールがオブジェクトにアクセスしようとすると、アクセスを可能にする権限が必要になる。もし、権限がなければアクセスは拒否される。
権限を与える
権限には、SELECT、 INSERT、UPDATE、DELETE、TRUNCATE、REFERENCES、TRIGGER、CREATE、CONNECT、TEMPORARY、 EXECUTE、USAGEがある。これらの権限をロールに割り当てるために、GRANT SQLコマンドを使う。
GRANT 特権 ON テーブル名 TO ロール名;
テーブルに対する権限の説明
権限
SELECT
テーブル、ビュー、シーケンスの任意の列のデータを読み取ることを許可する。
INSERT
テーブルに行を追加することを許可する。
UPDATE
テーブルに対する更新を許可する。
DELETE
テーブルから行を削除することを許可する。
まとめて権限を与える
権限を沢山のロールにひとつひとつ与えることを考えると気が遠くなる。そこで、権限をまとめてシステム内のすべてのロールに与えることができる。
GRANT SQLコマンドでPUBLICを使って、
GRANT 特権 ON テーブル名 TO PUBLIC;
また、まとめてすべての権限をロールに与える場合はGRANT SQLコマンドでALLを使う。
GRANT ALL ON テーブル名 TO ロール名;
権限を取り去る
与えられた権限を取り去るためにGRANT SQLコマンドを使う。
REVOKE 特権 ON テーブル名 FROM ロール名;
ロールの削除
既に作成されたロールを削除するためには、DROP ROLE SQLコマンドを使って、
DROP ROLE 名前;
別の方法として、コマンドプロンプトからdropuserプログラムを使って、
dropuser 名前;
でも可能。
ロールを確認する
既に作成されたロールはpg_rolesシステムカタログに登録されているので、その情報を表示すればよい。
登録済みのロールを確認するにはSELECT SQLコマンドを使って、
SELECT ROLNAME FROM pg_roles;
別の方法として、psqlの\duコマンドを使って、
\du
ロール属性と共に表示される。