PostgreSQL | ロール(ユーザー) ROLE 作成 | ロールの作成(CREATE ROLE)
CREATE ROLE コマンドを使用して PostgreSQL でロールを新しく作成する方法について説明する。
新しいロールを作成する
新しいロールを作成するには 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 で次のように実行する。
postgres=# create role kuma with login password 'bear';
CREATE ROLE
postgres=#
名前が kuma、認証パスワードが bear の新しいロールが作成された。
では作成されたロールを確認してみる。
postgres=# \du
롤 목록
롤 이름 | 속성 | 소속 그룹:
----------+------------------------------------------------+------------
kimkc | 슈퍼유저 | {}
kuma | | {}
orange | | {}
postgres | 슈퍼유저, 롤 만들기, DB 만들기, 복제, RLS 통과 | {}
postgres=#
PostgreSQL のインストール時に自動作成された postgres 以外に、先ほど作成した kuma が追加されていることを確認できる。
作成したロールで PostgreSQL に接続する
先ほど作成したロールで PostgreSQL に接続してみる。コマンドプロンプトで次のように実行する。
psql -U kuma -d devkuma
psql を使用する場合、接続先データベースを省略するとロール名と同じ名前のデータベースに接続する。ここでは kuma というデータベースを作成していないため、作成済みのデータベース名を明示的に指定している。
次のように kuma のパスワード入力待ちになるので、ロール作成時に指定したパスワードを入力する。
C:\Users\kimkc>psql -U kuma -d devkuma
kuma 사용자의 암호:
psql (12.2)
도움말을 보려면 "help"를 입력하십시오.
devkuma=>
kuma ロールで PostgreSQL に接続できた。
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 を指定した新しいロール superkuma を作成する。
devkuma=# create role superkuma with createdb createrole login password 'bear';
CREATE ROLE
devkuma=#
名前が superkuma の新しいロールが作成された。
では作成されたロールを確認する。
devkuma=# \du
롤 목록
롤 이름 | 속성 | 소속 그룹:
-----------+------------------------------------------------+------------
kimkc | 슈퍼유저 | {}
kuma | | {}
orange | | {}
postgres | 슈퍼유저, 롤 만들기, DB 만들기, 복제, RLS 통과 | {}
superkuma | 롤 만들기, DB 만들기 | {}
devkuma=#
新しく作成したロールの属性を見ると「롤 만들기, DB 만들기」と表示されており、CREATE ROLE コマンド実行時に指定した CREATEDB と CREATEROLE の設定が反映されていることを確認できる。
–
ここまで、CREATE ROLE コマンドを使用して新しいロールを作成する方法について説明した。