createuser — 新しいPostgreSQLのユーザアカウントを定義する
createuser
[connection-option
...] [option
...] [username
]
createuserは新しいPostgreSQLのユーザ(より正確にいえばロール)を作成します。
新しいユーザを作成できるのは、スーパーユーザとCREATEROLE
権限を持つユーザのみです。
したがって、createuserは、スーパーユーザもしくはCREATEROLE
権限を持つユーザとして接続可能なユーザによって実行されなければなりません。
SUPERUSER
、REPLICATION
、またはBYPASSRLS
権限を持つロールを作成したいのであれば、スーパーユーザとして接続しなければなりません。CREATEROLE
権限だけではいけません。
スーパーユーザであるということは、そのデータベースにおけるアクセス権限の検査を素通りできることを意味しています。したがって、スーパーユーザのアクセス権を簡単に与えてはなりません。
CREATEROLE
も非常に広範な権限を付与します。
createuserはSQLコマンドCREATE ROLE
のラッパーです。
このユーティリティによってユーザを作成しても、これ以外の方法でサーバにアクセスしてユーザを作成しても特に違いはありません。
createuserでは、下記のコマンドライン引数を指定できます。
username
作成するPostgreSQLユーザの名前を指定します。 この名前は、そのPostgreSQLインストレーションに存在するすべてのロールと異なるものでなければなりません。
-c number
--connection-limit=number
新しいユーザの最大接続数を設定します。 デフォルトでは無制限です。
-d
--createdb
新しいユーザに対してデータベースの作成を許可します。
-D
--no-createdb
新しいユーザに対してデータベースの作成を禁止します。 これはデフォルトです。
-e
--echo
createuserが生成しサーバに送信するコマンドを出力します。
-E
--encrypted
このオプションは廃止されましたが、後方互換性のためにまだ受け付けられます。
-g role
--role=role
このロールが新しいメンバーとして即座に追加されるロールを示します。
複数の-g
スイッチを記述することで、このロールがメンバーとして追加される複数のロールを指定することができます。
-i
--inherit
新しいロールは自動的にメンバとして属するロールの権限を継承します。 これがデフォルトです。
-I
--no-inherit
新しいロールは自動的にメンバとして属するロールの権限を継承しません。
--interactive
ユーザ名がコマンドラインで指定されない場合、ユーザ名の入力を促し、更に
-d
/-D
、-r
/-R
、-s
/-S
オプションがコマンドラインで指定されない場合にはどちらにするか入力を促します。
(これはPostgreSQL 9.1までのデフォルトの動作でした。)
-l
--login
新しいユーザに対してログインを許可します。 (つまり、このユーザ名をセッション起動時のユーザ識別子として使用することができます。) これがデフォルトです。
-L
--no-login
新しいユーザに対してログインを禁止します。 (ログイン権限を持たないロールはデータベース権限管理という面で有意です。)
-P
--pwprompt
このオプションが指定されると、createuserは新しいユーザのパスワードのプロンプトを表示します。 もしパスワード認証を使う予定がなければ、これは必要ありません。
-r
--createrole
他のロールの作成、変更、削除、コメント付与、セキュリティラベルの変更、およびメンバ資格の付与または取消しを、新しいユーザに対して許可します。つまり、このユーザはCREATEROLE
権限を持つことになります。
この権限によって付与される機能の詳細については、ロールの作成を参照してください。
-R
--no-createrole
新しいユーザに対して新しいロールの作成を禁止します。 これはデフォルトです。
-s
--superuser
新しいユーザはスーパーユーザになります。
-S
--no-superuser
新しいユーザはスーパーユーザにはなりません。 これはデフォルトです。
-V
--version
createuserのバージョンを表示し、終了します。
--replication
新しいユーザはREPLICATION
権限を持ちます。
この権限についてはCREATE ROLEの文書で詳しく説明します。
--no-replication
新しいユーザはREPLICATION
権限を持ちません。
この権限についてはCREATE ROLEの文書で詳しく説明します。
-?
--help
createuserのコマンドライン引数の使用方法を表示し、終了します。
createuserは、以下のコマンドライン引数も接続パラメータとして受け付けます。
-h host
--host=host
サーバが稼働しているマシンのホスト名を指定します。 この値がスラッシュから始まる場合、Unixドメインソケット用のディレクトリとして使用されます。
-p port
--port=port
サーバが接続を監視するTCPポートもしくはUnixドメインソケットファイルの拡張子を指定します。
-U username
--username=username
接続に使用するユーザ名です(作成するユーザの名前ではありません)。
-w
--no-password
パスワードの入力を促しません。
サーバがパスワード認証を必要とし、かつ、.pgpass
ファイルなどの他の方法が利用できない場合、接続試行は失敗します。
バッチジョブやスクリプトなどパスワードを入力するユーザが存在しない場合にこのオプションは有用かもしれません。
-W
--password
createuserは強制的にパスワード入力を促します。 (新しいユーザのパスワードではなく、サーバに接続するためのパスワードです)。
サーバがパスワード認証を要求する場合createuserは自動的にパスワード入力を促しますので、これが重要になることはありません。
しかし、createuserは、サーバにパスワードが必要かどうかを判断するための接続試行を無駄に行います。
こうした余計な接続試行を防ぐために-W
の入力が有意となる場合もあります。
PGHOST
PGPORT
PGUSER
デフォルトの接続パラメータです。
PG_COLOR
診断メッセージで色を使うかどうかを指定します。
可能な値はalways
、auto
、never
です。
また、このユーティリティは、他のほとんどのPostgreSQLユーティリティと同様、libpqでサポートされる環境変数を使用します(34.15を参照してください)。
問題が発生した場合、考えられる原因とエラーメッセージの説明については、CREATE ROLEとpsqlを参照してください。 データベースサーバは対象ホストで稼働していなければなりません。 また、libpqフロントエンドライブラリで使用される、全ての接続設定と環境変数が適用されることを覚えておいてください。
デフォルトデータベースサーバ上にjoe
というユーザを作成します。
$
createuser joe
デフォルトデータベースサーバ上にjoe
というユーザを一部の属性入力が促されるように作成します。
$
createuser --interactive joe
Shall the new role be a superuser? (y/n)
n
Shall the new role be allowed to create databases? (y/n)
n
Shall the new role be allowed to create more new roles? (y/n)
n
ホストeden
のポート番号5000上のサーバを使って上記と同じjoe
というユーザを属性を明示的に指定して作成し、背後で実行される問い合わせを表示します。
$
createuser -h eden -p 5000 -S -D -R -e joe
CREATE ROLE joe NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN;
joe
というユーザをスーパーユーザとして作成します。作成時にパスワードを割り当てます。
$
createuser -P -s -e joe
Enter password for new role:
xyzzy
Enter it again:
xyzzy
CREATE ROLE joe PASSWORD 'md5b5f5ba1a423792b526f799ae4eb3d59e' SUPERUSER CREATEDB CREATEROLE INHERIT LOGIN;
上の例で、実際には入力した新しいパスワードは画面上に表示されませんが、分かりやすくするために記載しています。 上記の通りこのパスワードはクライアントに送信される前に暗号化されます。