Postgresqlのロール関係の基本をメモしておく。
参考サイト:DbOnlineさん
http://www.dbonline.jp/postgresql/index.html
ロールとは:
接続の為のログインの管理やデータベースなどへの各権限の設定をロール単位で行います。
ロールにはユーザーやグループなどのまとまりのようなものです。
ロールの権限とは:
スーパーユーザーと所有者(オブジェクトを作成したユーザ)は
デフォルトで全ての権限を保持しているため、オブジェクトの所有者に権限を許可する必要はありません。
それ以外のロールに対して権限を付与するにはGRANTを使います。
例
■psql実行
$ psql -l
$ psql database
$ psql -U user -h localhost database
$ psql -f sqlfile -U user database
■psqlコマンド
\du ロールの詳細な情報
\z 権限の詳細な情報
■ロールの作成
・基本形
CREATE ROLE role_name
・ログイン可能なロール
CREATE ROLE role_name WITH LOGIN
・ログイン可能かつパスワード設定
CREATE ROLE role_name WITH LOGIN PASSWORD 'password'
・ログイン可能かつデータベース作成可能
CREATE ROLE role_name WITH LOGIN CREATEDB PASSWORD 'password'
■ロールの変更
・パスワード生成および変更
ALTER ROLE role_name WITH PASSWORD 'password'
・ロール編集権限、データベース作成権限付与
ALTER ROLE role_name WITH CREATEROLE CREATEDB
■ロールの削除
DROP ROLE role_name
■ロールの権限追加
GRANT SELECT, UPDATE, INSERT ON table_name TO role_name;
GRANT ALL ON table_name TO role_name;
■ロールの権限削除
REVOKE SELECT, UPDATE, INSERT ON table_name FROM role_name;
○ロール作成・変更のオプション
SUPERUSER (デフォ:NOSUPERUSER)
CREATEDB (デフォ:NOCREATEDB)
CREATEROLE (デフォ: NOCREATEROLE)
CREATEUSER (デフォ:NOCREATEUSER)
INHERIT (デフォ:NOINHERIT)
LOGIN (デフォ:NOLOGIN)
CONNECTION LIMIT connlimit
PASSWORD 'password'
VALID UNTIL 'timestamp'
IN ROLE rolename [, ...]
IN GROUP rolename [, ...]
ROLE rolename [, ...]
ADMIN rolename [, ...]
USER rolename [, ...]
SYSID uid
○権限の追加・削除のオプション
GRANT {{SELECT | INSERT | UPDATE | DELETE | RULE | REFERENCES | TRIGGER}
[,...] | ALL [PRIVILEGES]}
ON [TABLE] tablename [, ...]
TO {username | GROUP groupname | PUBLIC} [, ...] [WITH GRANT OPTION]
GRANT {{CREATE | TEMPORARY | TEMP} [,...] | ALL [PRIVILEGES]}
ON DATABASE dbname [, ...]
TO {username | GROUP groupname | PUBLIC } [, ...] [WITH GRANT OPTION]
GRANT {EXECUTE | ALL [PRIVILEGES]}
ON FUNCTION funcname ([[argmode] [argname] argtype [, ...]]) [, ...]
TO {username | GROUP groupname | PUBLIC} [, ...] [WITH GRANT OPTION]
GRANT {USAGE | ALL [PRIVILEGES]}
ON LANGUAGE langname [, ...]
TO {username | GROUP groupname | PUBLIC} [, ...] [WITH GRANT OPTION]
GRANT {{CREATE | USAGE} [,...] | ALL [PRIVILEGES]}
ON SCHEMA schemaname [, ...]
TO {username | GROUP groupname | PUBLIC} [, ...] [WITH GRANT OPTION]
GRANT {CREATE | ALL [PRIVILEGES]}
ON TABLESPACE tablespacename [, ...]
TO {username | GROUP groupname | PUBLIC} [, ...] [WITH GRANT OPTION]
GRANT role [, ...]
TO {username | GROUP groupname | PUBLIC} [, ...] [WITH ADMIN OPTION]