ロールを作成する(CREATE ROLE)

PostgreSQL ではロールを新規に作成するために CREATE ROLE コマンドを使用します。ここでは PostgreSQL でロールを新規に作成する方法について解説します。

(Last modified: )

新しいロールを作成する

新しいロールを作成するには CREATE ROLE コマンドを使用します。書式は次の通りです。

CREATE ROLE name [ [ WITH ] option [ ... ] ]

option:
      SUPERUSER | NOSUPERUSER
    | CREATEDB | NOCREATEDB
    | CREATEROLE | NOCREATEROLE
    | INHERIT | NOINHERIT
    | LOGIN | NOLOGIN
    | REPLICATION | NOREPLICATION
    | BYPASSRLS | NOBYPASSRLS
    | CONNECTION LIMIT connlimit
    | [ ENCRYPTED ] PASSWORD 'password'
    | VALID UNTIL 'timestamp'
    | IN ROLE role_name [, ...]
    | IN GROUP role_name [, ...]
    | ROLE role_name [, ...]
    | ADMIN role_name [, ...]
    | USER role_name [, ...]
    | SYSID uid

オプションの数が多いのですが、ロールを使ってユーザー認証に使用する目的で使用する場合には基本となる書式は次の通りです。

CREATE ROLE name [ WITH ] LOGIN PASSWORD 'password'

ロール名( name )を指定し、クライアントから PostgreSQL に接続する時にユーザー認証の対象として利用可能なロールを、パスワード認証を行う際に使用するパスワードを( 'password' )として作成します。

ロールを作成するにはコマンドを実行するロールがスーパーユーザーか、 CREATEROLE 権限を持っている必要があります。

-- --

それでは実際に試してみます。 psql 上で次のように実行してください。

create role saru with login password 'monkey';

新しいロールを作成する(1)

名前が saru 、パスワード認証で使用するパスワードが monkey の新しいロールが作成されました。

それでは作成済みのロール一覧を表示してみます。(事前に \x を実行して拡張表示を on にしてあります)。

\du

新しいロールを作成する(2)

PostgreSQL のインストール時に自動で作成した postgres に加えて先ほど作成した saru が追加されていることが確認できました。

作成したロールでPostgreSQLへ接続する

先ほど作成したロールで PostgreSQL へ接続を行ってみます。コマンドプロンプトから次のように実行してください。

psql -U saru -d mydb

psql を使う場合、接続するデータベースを省略するとロール名と同じデータベースに接続しようとするのですが、 saru という名前のデータベースは作成していないので今回は作成済みのデータベース名を明示的に指定しています。

次のように saru のパスワード入力待ちとなりますので、ロール作成時に指定したパスワードを入力してください。

作成したロールでPostgreSQLへ接続する(1)

saru ロールで PostgreSQL へ接続することができました。

作成したロールでPostgreSQLへ接続する(2)

CREATE ROLEコマンドの権限に関するオプションの説明

CREATE ROLE コマンドで指定可能なオプションの中で権限に関係するオプションについて解説します。(その他のオプションについては必要になった時に合わせて解説します)。

SUPERUSER or NOSUPERUSER

SUPERUSER を指定した場合、作成するロールはスーパーユーザーとなります。スーパーユーザーはほとんどの権限を持つことになるので作成する場合は注意が必要です。なお PostgreSQL 作成時に自動で作成される postgres ロールはスーパーユーザーです。 NOSUPERUSER を指定した場合はスーパーユーザーではないロールを作成します。

SUPERUSER を指定する場合は次のように行います。このオプションを指定しなかった場合は、デフォルトで NOSUPERUSER が指定されたものとして扱われます。

CREATE ROLE name WITH SUPERUSER

CREATEDB or NOCREATEDB

CREATEDB を指定した場合、作成するロールはデータベースを作成する権限を持ちます。 NOCREATEDB を指定した場合はデータベースを作成することができません。

CREATEDB を指定する場合は次のように行います。このオプションを指定しなかった場合は、デフォルトで NOCREATEDB が指定されたものとして扱われます。

CREATE ROLE name WITH CREATEDB

CREATEROLE or NOCREATEROLE

CREATEROLE を指定した場合、作成するロールはロールを作成権限を持ちます。 NOCREATEROLE を指定した場合はロールをを作成することができません。

※ CREATEROLE 権限を付与する場合は注意が必要です。 CREATEROLE 権限があるロールは、自身が持っていない権限を持つようなロールを新たに作成することができます。よって CREATEROLE を指定する場合は、結果としてほとんどすべての権限を与えるのと同じ意味を持ちます。

CREATEROLE を指定する場合は次のように行います。このオプションを指定しなかった場合は、デフォルトで NOCREATEROLE が指定されたものとして扱われます。

CREATE ROLE name WITH CREATEROLE

-- --

それでは実際に試してみます。 CREATEDB と CREATEROLE を指定した新しいロール momo を作成してみます。

create role momo with createdb createrole login password 'peach';

CREATE ROLEコマンドの権限に関するオプションの説明(1)

名前が momo の新しいロールが作成されました。

それでは作成済みのロール一覧を表示してみます。(事前に \x を実行して拡張表示を on にしてあります)。

\du

CREATE ROLEコマンドの権限に関するオプションの説明(2)

新しく作成したロールの属性の部分をみると「ロール作成可」「DB作成可」と表示されており、 CREATE ROLE コマンドを実行した時に指定した CREATEDB と CREATEROLE の設定が反映されていることが確認できました。

-- --

CREATE ROLE コマンドを使って新しいロールを作成する方法について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。