WEBの勉強ノート
Loading

PostgreSQL データベースロール

2009 年 5 月 17 日 カテゴリー: PostgreSQL

PostgreSQL 独自のユーザー、グループの両方を兼ねた “ロール” という概念があるようです。これは PostgreSQL 8.1 からできたもので、それ以前は普通にユーザーとグループだったようです。

データベースロールの属性

データベースロールにはいくつかの属性を設定できるようです。

権限 デフォルト 説明
スーパーユーザー権限 false PostgreSQL の権限検査を受けない権限、全権限をもったユーザ権限。*1
ログイン権限 false データベースにログインするための権限
ロール作成 false 他のロールを作成する権限
データベース作成 false データベース作成に必要な権限
ロールの継承 true  
パスワード なし データベース接続時の認証に使われるパスワード
パスワードの有効期限 無制限 パスワードの有効期限
最大接続数 無制限 該当のロールで同時にデータベースにアクセスできる最大数

データベースロールとシステムのユーザーについて

PostgreSQL のデータベースロールと、Linux 側のユーザーは全く別のもの。ただし、以下にあるように、同名にしておくと便利。

多くのアプリケーション(createuserおよびpsqlを含む)では、オペレーティングシステムの現在のユーザ名をデフォルトと仮定します。 したがって、ロールとオペレーティングシステムのユーザの組み合わせ間で名前を一致させておくと便利です。

第 18章データベースロールと権限

データベースロールの作成 CREATE ROLE

データベースロールを作成する前に、同名のシステムユーザーを作成しておきます。

[root@centos ~]# useradd centos
[root@centos ~]# passwd centos

データベースロールの作成には Create Role コマンドを使います。Create Role は SQL コマンドなので、クライアントプログラムである psql でデータベースに接続して行います。

[root@centos ~]# su - postgres
-bash-3.2$ psql
Welcome to psql 8.3.7, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with psql commands
       \g or terminate with semicolon to execute query
       \q to quit

postgres=# create role centos with login password 'パスワード';
CREATE ROLE
postgres=# \du
                               List of roles
 Role name | Superuser | Create role | Create DB | Connections | Member of
-----------+-----------+-------------+-----------+-------------+-----------
 centos    | no        | no          | no        | no limit    | {}
 postgres  | yes       | yes         | yes       | no limit    | {}
(2 rows)

データベースロールの属性の変更 ALTER ROLE

ロールの属性変更には、基本的にスーパーユーザー権限かロール作成権限を持ったユーザーが行う必要がある。*2

下の例では、作成した centos ロールに createdb 権限を付与した。付与する権限はスペースで区切ることで、複数付与することもできる。

postgres=# alter role centos createdb;
ALTER ROLE
postgres=# \du
                               List of roles
 Role name | Superuser | Create role | Create DB | Connections | Member of
-----------+-----------+-------------+-----------+-------------+-----------
 centos    | no        | no          | yes       | no limit    | {}
 postgres  | yes       | yes         | yes       | no limit    | {}
(2 rows)

 


*1

データベースの初期化を行ったユーザー(ロール)が最初のスーパーユーザーとなる。デフォルトでは postgres ユーザー(ロール)

*2

一般ユーザーは、権限の削除と自分のパスワード変更のみ可能(権限の付与ができない)


参考にしたサイト

19.1. データベースロール

コメントをどうぞ