CREATE ROLE コマンドは、PolarDB データベースクラスターに新しいロールを追加します。
前提条件
このコマンドを実行するには、CREATEROLE 権限を持つか、データベースのスーパーユーザーである必要があります。
概要
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' | PASSWORD NULL
| VALID UNTIL 'timestamp'
| IN ROLE role_name [, ...]
| IN GROUP role_name [, ...]
| ROLE role_name [, ...]
| ADMIN role_name [, ...]
| USER role_name [, ...]
| SYSID uid主な動作
ロールとは、データベースオブジェクトの所有者となり、データベース権限を保持できるエンティティです。用途に応じて、ロールはユーザー、グループ、またはその両方として機能します。
ロールはデータベースクラスター単位で定義され、クラスター内のすべてのデータベースで有効です。
CREATEDBやCREATEROLEなどのロールオプションは、INHERITが設定されていても、ロールメンバーには継承されません。INHERIT属性は、付与可能な権限(データベースオブジェクトへのアクセス権限およびロールメンバーシップ)を制御するものであり、CREATEDBのような特別なロール属性を制御するものではありません。CREATEDB権限を持つロールのメンバーであっても、まずSET ROLEを実行して当該ロールを仮装しない限り、データベースを作成できません。VALID UNTILはパスワードの有効期限のみを設定し、ロール自体の有効期限を設定するものではありません。パスワード以外の認証方式を使用する場合は、この有効期限は適用されません。CREATEROLE権限を持つロールは、ほぼスーパーユーザーと見なすことができます。ただし、スーパーユーザーロールを除き、自身とは異なる権限を持つロールを作成できます。CONNECTION LIMITの制限は近似値です。残りスロットが 1 つの状態で 2 つのセッションが同時に開始された場合、両方とも拒否される可能性があります。また、スーパーユーザーに対しては、この制限は一切適用されません。
パラメーター
`name`
新規ロールの名前です。
`SUPERUSER` | `NOSUPERUSER`
データベース内のすべてのアクセス制限をオーバーライドする権限を付与または拒否します。スーパーユーザーのみが他のスーパーユーザーを作成できます。デフォルト値: NOSUPERUSER。
`CREATEDB` | `NOCREATEDB`
新規データベースを作成する権限を付与または拒否します。デフォルト値: NOCREATEDB。
`CREATEROLE` | `NOCREATEROLE`
他のロールの作成、変更、削除、コメント付与、セキュリティラベルの変更、およびメンバーシップの付与・取り消しを行う権限を付与または拒否します。デフォルト値: NOCREATEROLE。
`INHERIT` | `NOINHERIT`
ロールが所属する親ロールの権限を自動的に継承するかどうかを制御します。INHERIT を指定すると、ロールは直接または間接的な親ロールに付与されたすべての権限を利用できます。NOINHERIT を指定すると、これらの権限を利用するには明示的に SET ROLE を実行する必要があります。デフォルト値: INHERIT。
`LOGIN` | `NOLOGIN`
ロールを使用してクライアントセッションを開始できるかどうかを制御します。LOGIN を持つロールは通常「ユーザー」と呼ばれます。デフォルト値: NOLOGIN(ただし、CREATE ROLE が CREATE USER として呼び出された場合は除く)。
`REPLICATION` | `NOREPLICATION`
レプリケーションモード(物理または論理)で接続し、レプリケーションスロットを作成または削除する権限を付与または拒否します。REPLICATION 権限は、スーパーユーザーのみが付与できます。デフォルト値: NOREPLICATION。
`BYPASSRLS` | `NOBYPASSRLS`
すべての行レベルセキュリティ(RLS)ポリシーをバイパスする権限を付与または拒否します。BYPASSRLS 権限は、スーパーユーザーのみが付与できます。デフォルト値: NOBYPASSRLS。
pg_dumpは、すべてのテーブル内容を確実にエクスポートするために、デフォルトでrow_securityをOFFに設定します。pg_dumpを実行するユーザーが適切な権限を持っていない場合、エラーが返されます。スーパーユーザーおよびテーブルの所有者は、常に RLS をバイパスします。
`CONNECTION LIMIT connlimit`
LOGIN を持つロールに対して許可される同時接続の最大数です。この制限には通常の接続のみがカウントされ、準備済みトランザクションおよびバックグラウンドワーカー接続は含まれません。-1 は制限なしを意味します。デフォルト値: -1。
`[ ENCRYPTED ] PASSWORD 'password'` | `PASSWORD NULL`
ロールのパスワードを設定します。パスワードは LOGIN を持つロールでのみ意味を持ちますが、任意のロールに対して設定可能です。省略した場合、パスワードは null に設定され、パスワード認証は常に失敗します。
パスワードは、システムカタログ内では常に暗号化されて保存されます。ENCRYPTED キーワードは互換性のため受け付けられますが、実際には効果はありません。暗号化方式は password_encryption 構成パラメーターによって決定されます。パスワード文字列が既に MD5 または SCRAM 形式である場合、そのまま保存されます。
空文字列を指定しても、パスワードは null に設定されます。
このコマンドで暗号化されていないパスワードを指定すると、パスワードは平文でサーバーに送信され、クライアントのコマンド履歴やサーバーのログに記録される可能性があります。安全にパスワードを設定するには、createuser プログラムまたは \password コマンド(psql 内)をご利用ください。
`VALID UNTIL 'timestamp'`
ロールのパスワードが無効となる日時を設定します。省略した場合、パスワードは有効期限切れになりません。
`IN ROLE role_name [, ...]`
新規ロールを、指定された既存のロールのメンバーとして追加します。新規ロールをこれらのロールの管理者として追加するには、別途 GRANT コマンドを実行してください。
`IN GROUP role_name [, ...]`
IN ROLE の非推奨の表記です。
`ROLE role_name [, ...]`
指定された既存のロールを新規ロールのメンバーとして追加し、新規ロールを実質的にグループとして機能させます。
`ADMIN role_name [, ...]`
ROLE と同様ですが、指定されたロールには ADMIN OPTION が付与され、それらが他のユーザーを新規ロールのメンバーとして追加できるようになります。
`USER role_name [, ...]`
ROLE の非推奨の表記です。
`SYSID uid`
無視されます。互換性のため受け付けられます。
例
パスワードなしでログイン可能なロールを作成します。
CREATE ROLE jonathan LOGIN;パスワード付きロールを作成します(CREATE USER は CREATE ROLE ... LOGIN と等価です)。
CREATE USER davide WITH PASSWORD 'jw8s0F4';2005 年初頭に有効期限が切れるパスワード付きロールを作成します。
CREATE ROLE miriam WITH LOGIN PASSWORD 'jw8s0F4' VALID UNTIL '2005-01-01';データベースの作成および他のロールの管理が可能なロールを作成します。
CREATE ROLE admin WITH CREATEDB CREATEROLE;次のステップ
作成後にロール属性を変更するには、
ALTER ROLEを使用します。ロールを削除するには、
DROP ROLEを使用します。ロールメンバーシップを管理するには、
GRANTおよびREVOKEを使用します。ロールを仮装してその権限にアクセスするには、
SET ROLEを使用します。