createuserは、新しいPostgreSQLユーザを作成します。 スーパーユーザ(pg_shadowテーブルでusesuperが設定されているユーザ)のみが新しいPostgreSQLユーザを作成できます。 従って、createuserは、PostgreSQLスーパーユーザとして接続可能なユーザによって実行されなければなりません。
また、スーパーユーザであることは、そのデータベースにおけるアクセス権限の検査を素通りできることを意味しています。 ですから、スーパーユーザという地位を簡単に与えてはなりません。
createuserはCREATE USERSQLコマンドのラッパです。 従って、このユーティリティによってユーザを作成しても、これ以外の方法でサーバにアクセスしてユーザを作成しても特別な違いはありません。
createuserでは、下記のコマンドライン引数を指定できます。
作成するPostgreSQLユーザの名前を指定します。 この名前は、使用中のPostgreSQLインストレーションのすべてのユーザ名の中で一意でなければなりません。
新しいユーザは、他のユーザを作成することが許可されます。 (注意: 実際には、これにより新しいユーザはスーパーユーザとなります。 このオプションの命名は適切ではありません。)
新しいユーザが他のユーザを作成することを禁止します。 (つまり、新しいユーザはスーパーユーザではなく、一般ユーザとなります。) これがデフォルトです。
新しいユーザは、データベースの作成が許可されます。
新しいユーザは、データベースの作成が禁止されます。 これがデフォルトです。
createuserが生成し、サーバに送信したコマンドをエコー表示します。
データベースに保存する、ユーザのパスワードを暗号化します。 指定されない場合はデフォルトのパスワードの振舞いが使用されます。
新しいユーザにデフォルト以外のユーザIDを指定することができます。 必要ではありませんが、これを好む人たちもいます。
データベースに保存する、ユーザのパスワードを暗号化しません。 指定されない場合はデフォルトのパスワードの振舞いが使用されます。
これが指定されると、createuserは新しいユーザのパスワードのプロンプトを表示します。 もしパスワード認証を使う予定がなければ、これは必要ありません。
応答を表示させないようにします。
コマンドラインで指定しない場合、名前や他の不足している情報の入力が要求されます。
createuserは、以下のコマンドライン引数も接続パラメータとして受け付けます。
サーバが稼働しているマシンのホスト名を指定します。 この値がスラッシュから始まる場合、Unixドメインソケット用のディレクトリとして使用されます。
サーバが接続を監視するTCPポートもしくはUnixドメインソケットファイルの拡張子を指定します。
接続に使用するユーザ名です。(作成するユーザの名前ではありません)
パスワードのプロンプトを強制的に表示します (新しいユーザのパスワードではなく、サーバに接続するためのパスワードです)。
問題が発生した場合、CREATE USERとpsqlにおける潜在する問題とエラーメッセージの説明を参照してください。 データベースサーバは対象ホストで稼働していなければなりません。 また、libpqフロントエンドライブラリで使用される、全ての接続設定と環境変数が適用されます。
joeというユーザを、デフォルトデータベースサーバ上に作成します。
$ createuser joe Shall the new user be allowed to create databases? (y/n) n Shall the new user be allowed to create more new users? (y/n) n CREATE USER
edenホスト上のポート番号5000のサーバを使って同じjoeユーザを作成し、プロンプトを回避し、背後で実行される問い合わせを表示します。
$ createuser -h eden -p 5000 -D -A -e joe CREATE USER joe NOCREATEDB NOCREATEUSER; CREATE USER
joeユーザをスーパーユーザとして作成します。またその時にパスワードを割り当てます。
$ createuser -P -d -a -e joe Enter password for new user: xyzzy Enter it again: xyzzy CREATE USER joe PASSWORD 'xyzzy' CREATEDB CREATEUSER; CREATE USER
実際には入力したパスワードは画面には表示されません。上の例では、何を入力したか分かり易くなるように記載しています。 しかし、上で示した通りコマンドのエコー出力にはパスワードが出力willされます。 したがって、第三者が画面を覗き見できるような環境では、パスワードを割り当てる時に-eを使用しない方がいいでしょう。