createuserは新しいPostgreSQLユーザ(より正確にいえばロール)を作成します。 新しいユーザを作成できるのは、スーパーユーザとCREATEROLE権限を持つユーザのみです。 したがって、createuserは、スーパーユーザもしくはCREATEROLE権限を持つユーザとして接続可能なユーザによって実行されなければなりません。
新しいスーパーユーザを作成したいのであれば、スーパーユーザとして接続しなければなりません。CREATEROLEだけではいけません。 スーパーユーザであるということは、そのデータベースにおけるアクセス権限の検査を素通りできることを意味しています。 したがって、スーパーユーザという地位を簡単に与えてはなりません。
createuserはCREATE ROLE SQLコマンドのラッパです。 このユーティリティによってユーザを作成しても、これ以外の方法でサーバにアクセスしてユーザを作成しても特に違いはありません。
createuserでは、下記のコマンドライン引数を指定できます。
作成するPostgreSQLユーザの名前を指定します。 この名前は、そのPostgreSQLインストレーションの中で一意でなければなりません。
新しいユーザはスーパーユーザになります。
新しいユーザはスーパーユーザにはなりません。 これがデフォルトです。
新しいユーザに対してデータベースの作成を許可します。
新しいユーザに対してデータベースの作成を禁止します。 これがデフォルトです。
新しいユーザに対して新しいロールの作成を許可します。 (つまり、このユーザはCREATEROLE権限を持つことになります。)
新しいユーザに対して新しいロールの作成を禁止します。 これがデフォルトです。
新しいユーザに対してログインを許可します。 (つまり、このユーザ名をセッション起動時のユーザ識別子として使用することができます。) これがデフォルトです。
新しいユーザに対してログインを禁止します。 (ログイン権限を持たないロールはデータベース権限管理という面で有意です。)
新しいロールは自動的にそのロールがメンバであるロールの権限を継承します。 これがデフォルトです。
新しいロールは自動的にそのロールがメンバであるロールの権限を継承しません。
新しいユーザの最大接続数を設定します。 デフォルトは無制限です。
このオプションが指定されると、createuserは新しいユーザのパスワードのプロンプトを表示します。 もしパスワード認証を使う予定がなければ、これは必要ありません。
データベースに保存する、ユーザのパスワードを暗号化します。 このオプションが指定されていない場合は、デフォルトのパスワードの挙動が使用されます。
データベースに保存するユーザのパスワードを暗号化しません。 このオプションが指定されていない場合は、デフォルトのパスワードの挙動が使用されます。
createuserが生成し、サーバに送信したコマンドをエコー表示します。
コマンドラインで指定されていない場合、名前やその他の不足する情報を入力するよう要求されます。
createuserは、以下のコマンドライン引数も接続パラメータとして受け付けます。
サーバが稼働しているマシンのホスト名を指定します。 この値がスラッシュから始まる場合、Unixドメインソケット用のディレクトリとして使用されます。
サーバが接続を監視するTCPポートもしくはUnixドメインソケットファイルの拡張子を指定します。
接続に使用するユーザ名です(作成するユーザの名前ではありません)。
createuserは強制的にパスワード入力を促します。 (新しいユーザのパスワードではなく、サーバに接続するためのパスワードです)。
サーバがパスワード認証を要求する場合createuserは自動的にパスワード入力を促しますので、これが重要になることはありません。 しかし、createuserは、サーバにパスワードが必要かどうかを判断するための接続試行を無駄に行います。 こうした余計な接続試行を防ぐために-Wの入力が有意となる場合もあります。
デフォルトの接続パラメータです。
また、このユーティリティは、他のほとんどのPostgreSQLユーティリティと同様、libpqでサポートされる環境変数を使用します(項30.12を参照してください)。
問題が発生した場合、考えられる原因とエラーメッセージの説明については、CREATE ROLEとpsqlを参照してください。 データベースサーバは対象ホストで稼働していなければなりません。 また、libpqフロントエンドライブラリで使用される、全ての接続設定と環境変数が適用されることを覚えておいてください。
デフォルトデータベースサーバ上に、joeというユーザを作成します。
$ createuser 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;
上の例で、実際には入力した新しいパスワードは画面上に表示されませんが、分かりやすくするために記載しています。 上記の通りこのパスワードはクライアントに送信される前に暗号化されます。 --unencryptedオプションが使用された場合、パスワードはコマンドの出力に(おそらくはサーバのログなどに)含まれて表示されます。 ですので、もし誰かに画面を覗き見されるかもしれない場合、パスワードを割り当てる際には-eを使用しないことを勧めます。