db.createUser()
定義
db.createUser(user, writeConcern)
メソッドが実行されるデータベースに新しいユーザーを作成します。
db.createUser()
は、ユーザーがデータベースに既に存在する場合、重複ユーザーエラーを返します。重要
mongosh メソッド
このページでは、
mongosh
メソッドについて記載しています。ただし、データベースコマンドや Node.js などの言語固有のドライバーのドキュメントには該当しません。データベースコマンドについては、
createUser
コマンドを参照してください。MongoDB API ドライバーについては、各言語の MongoDB ドライバー ドキュメントを参照してください。
db.createUser()
メソッドの構文は次のとおりです。フィールドタイプ説明user
ドキュメント作成するユーザーに関する認証およびアクセス情報を含むドキュメントを参照してください。writeConcern
ドキュメント任意。 操作の 書込み保証( write concern ) のレベル。 詳しくは、 書込み保証(write concern) の仕様を参照してください。
user
ドキュメントはユーザーを定義し、形式は以下のとおりです。Tip
passwordPrompt()
メソッドを様々なユーザー認証管理メソッドやコマンドと組み合わせて使用すると、メソッドやコマンドの呼び出しでパスワードを直接指定する代わりに、パスワードの入力を求めるプロンプトが表示されます。ただし、以前のバージョンのmongo
シェルと同様に、パスワードを直接指定することもできます。{ user: "<name>", pwd: passwordPrompt(), // Or "<cleartext password>" customData: { <any information> }, roles: [ { role: "<role>", db: "<database>" } | "<role>", ... ], authenticationRestrictions: [ { clientSource: ["<IP>" | "<CIDR range>", ...], serverAddress: ["<IP>" | "<CIDR range>", ...] }, ... ], mechanisms: [ "<SCRAM-SHA-1|SCRAM-SHA-256>", ... ], passwordDigestor: "<server|client>" } user
ドキュメントには、以下のフィールドがあります。フィールドタイプ説明user
string新しいユーザーの名前。pwd
stringユーザーのパスワード。
$external
データベースでdb.createUser()
を実行して、MongoDB の外部に保存される認証情報を持つユーザーを作成する場合、pwd
フィールドは必要ありません。値は以下のいずれかになります。
クリアテキスト文字列のユーザーのパスワード
passwordPrompt()
で、ユーザーのパスワードの入力を求める
passwordPrompt()
メソッドを様々なユーザー認証管理メソッドやコマンドと組み合わせて使用すると、メソッドやコマンドの呼び出しでパスワードを直接指定する代わりに、パスワードの入力を求めるプロンプトが表示されます。ただし、以前のバージョンのmongo
シェルと同様に、パスワードを直接指定することもできます。customData
ドキュメント任意。任意の情報が含まれます。このフィールドは、データ管理者がこの特定のユーザーに関連付けたいデータを保存するために使用できます。たとえば、ユーザーの氏名や従業員 ID などがあります。roles
配列ユーザーに付与されたロールです。空の配列[]
を指定すると、ロールのないユーザーも作成できます。配列任意。作成されたユーザーにサーバーが強制する認証制限です。ユーザーによるサーバー接続が許可される、またはサーバーがユーザーを受け入れることができる IP アドレスと CIDR範囲のリストを指定します。
mechanisms
配列任意。SCRAM ユーザー資格情報を作成するための、特定の SCRAM メカニズムを指定します。
authenticationMechanisms
が指定されている場合は、authenticationMechanisms
のサブセットのみを指定できます。有効な値は次のとおりです。
"SCRAM-SHA-1"
SHA-1
ハッシュ関数を使用します。
"SCRAM-SHA-256"
SHA-256
ハッシュ関数を使用します。passwordDigestor は必ず
server
にします。
デフォルトは
SCRAM-SHA-1
とSCRAM-SHA-256
の両方です。passwordDigestor
string任意。サーバーまたはクライアントがパスワードをダイジェスト化するかどうかを示します。
使用可能な値は次のとおりです。
"server"
(デフォルト)- サーバーはクライアントからダイジェスト化されていないパスワードを受け取り、そのパスワードをダイジェスト化します。
"client"
(SCRAM-SHA-256
とは互換性がありません)- クライアントはパスワードをダイジェスト化し、ダイジェスト化されたパスワードをサーバーに渡します。
互換性
このメソッドは、次の環境でホストされている配置で使用できます。
重要
このコマンドは、 MongoDB Atlasクラスターではサポートされていません。 すべてのコマンドの Atlas サポートの詳細については、「 サポートされていないコマンド 」を参照してください。
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
ロール
roles
フィールドでは、組み込みロールとユーザー定義ロールの両方を指定できます。
db.createUser()
が実行されるのと同じデータベースに存在するロールを指定するには、ロールの名前を使用してロールを指定します。
"readWrite"
または、次のように、ドキュメントを使用してロールを指定することもできます。
{ role: "<role>", db: "<database>" }
別のデータベースに存在するロールを指定するには、 ドキュメントを使用してロールを指定します。
認証の制限
authenticationRestrictions
ドキュメントには、次のフィールドのみを含めることができます。 authenticationRestrictions
ドキュメントに認識されないフィールドが含まれている場合、サーバーはエラーをスローします。
フィールド名 | 値 | 説明 |
---|---|---|
clientSource | IP アドレスおよび/またはCIDR範囲の配列 | 存在する場合、サーバーはユーザーを認証する際に、クライアントの IP アドレスが指定されたリストに含まれているか、リスト内の CIDR 範囲に属していることを確認します。 クライアントの IP アドレスが存在しない場合、サーバーはユーザーを認証しません。 |
serverAddress | IP アドレスおよび/またはCIDR範囲の配列 | クライアントが接続できる IP アドレスまたは CIDR 範囲のリスト。 存在する場合、サーバーはクライアントの接続が指定されたリスト内の IP アドレス経由で受け入れられたことを確認します。 認識されない IP アドレス経由で接続が受け入れられた場合、サーバーはユーザーを認証しません。 |
重要
ユーザーが互換性のない認証制限を持つ複数のロールを継承した場合、そのユーザーは使用できなくなります。
たとえば、ユーザーが、 clientSource
フィールドが["198.51.100.0"]
であるロールと、 clientSource
フィールドが["203.0.113.0"]
である別のロールを継承した場合、サーバーはユーザーを認証できません。
MongoDB での認証の詳細については、「自己管理型配置での認証 」を参照してください。
db.createUser()
メソッドは、createUser
コマンドをラップします。
動作
ユーザー ID
MongoDB ではユーザーの作成時に自動的に一意のuserId
が割り当てられます。
レプリカセット
レプリカセットで実行する場合、 db.createUser()
はデフォルトで"majority"
書込み保証を使用して実行されます。
暗号化
警告
デフォルトでは、 を使用している場合でも、db.createUser()
は指定されたすべてのデータを MongoDBpasswordPrompt()
インスタンスにクリアテキストで送信します。TLS トランスポート暗号化を使用して、 db.createUser()
によって送信されたパスワードを含む、クライアントとサーバー間の通信を保護します。 TLS トランスポート暗号化を有効にする手順については、「 TLS/SSL 用にmongod
とmongos
を構成する 」を参照してください。
MongoDB では、クリアテキストのパスワードはストアされません。パスワードが脆弱になるのは、クライアントとサーバー間の転送時と、TLS 転送暗号化が有効になっていない場合のみです。
外部認証情報
たとえば Kerberos を使用する MongoDB Enterprise がインストールされている場合などは、$external
データベースで作成されたユーザーの認証情報は、MongoDB の外部に保存される必要があります。
$external
認証ユーザー(Kerberos、LDAP、または x.509 ユーザー)でクライアント セッションと因果整合性の保証を使用するには、ユーザー名を 10k バイトより大きくすることはできません。
local
Database
ローカル データベース上でユーザーを作成することはできません。
必要なアクセス権
データベースに新しいユーザーを作成するには、そのデータベース リソース上の
createUser
アクション が必要です。
userAdmin
および userAdminAnyDatabase
の組み込みロールが、それぞれのリソースでのcreateUser
アクションおよび grantRole
アクションを提供します。
例
以下の db.createUser()
操作により、products
データベースに accountAdmin01
ユーザーが作成されます。
Tip
passwordPrompt()
メソッドを様々なユーザー認証管理メソッドやコマンドと組み合わせて使用すると、メソッドやコマンドの呼び出しでパスワードを直接指定する代わりに、パスワードの入力を求めるプロンプトが表示されます。ただし、以前のバージョンの mongo
シェルと同様に、パスワードを直接指定することもできます。
use products db.createUser( { user: "accountAdmin01", pwd: passwordPrompt(), // Or "<cleartext password>" customData: { employeeId: 12345 }, roles: [ { role: "clusterAdmin", db: "admin" }, { role: "readAnyDatabase", db: "admin" }, "readWrite"] }, { w: "majority" , wtimeout: 5000 } )
この操作により、accountAdmin01
に次のロールが付与されます。
admin
データベース上のclusterAdmin
ロールとreadAnyDatabase
ロールproducts
データベースのreadWrite
ロール
ロールのあるユーザーの作成
次の操作では、products
データベース内に accountUser
を作成し、このユーザーに readWrite
ロールと dbAdmin
ロールを付与します。
Tip
passwordPrompt()
メソッドを様々なユーザー認証管理メソッドやコマンドと組み合わせて使用すると、メソッドやコマンドの呼び出しでパスワードを直接指定する代わりに、パスワードの入力を求めるプロンプトが表示されます。ただし、以前のバージョンの mongo
シェルと同様に、パスワードを直接指定することもできます。
use products db.createUser( { user: "accountUser", pwd: passwordPrompt(), // Or "<cleartext password>" roles: [ "readWrite", "dbAdmin" ] } )
ロールのないユーザーの作成
次の操作では、 admin
データベースに reportsUser
という名前のユーザーが作成されますが、ロールはまだ割り当てられません。
Tip
passwordPrompt()
メソッドを様々なユーザー認証管理メソッドやコマンドと組み合わせて使用すると、メソッドやコマンドの呼び出しでパスワードを直接指定する代わりに、パスワードの入力を求めるプロンプトが表示されます。ただし、以前のバージョンの mongo
シェルと同様に、パスワードを直接指定することもできます。
use admin db.createUser( { user: "reportsUser", pwd: passwordPrompt(), // Or "<cleartext password>" roles: [ ] } )
ロールのある管理者ユーザーの作成
次の操作では、admin
データベースに appAdmin
という名前のユーザーが作成され、このユーザーに config
データベースへの readWrite
アクセス権が付与されます。これにより、このユーザーはバランサー設定など、シャーディングされたクラスターの一部の設定を変更することが出来ます。
Tip
passwordPrompt()
メソッドを様々なユーザー認証管理メソッドやコマンドと組み合わせて使用すると、メソッドやコマンドの呼び出しでパスワードを直接指定する代わりに、パスワードの入力を求めるプロンプトが表示されます。ただし、以前のバージョンの mongo
シェルと同様に、パスワードを直接指定することもできます。
use admin db.createUser( { user: "appAdmin", pwd: passwordPrompt(), // Or "<cleartext password>" roles: [ { role: "readWrite", db: "config" }, "clusterAdmin" ] } )
認証制限のあるユーザーの作成
次の操作により、 admin
データベースに restricted
という名前のユーザーが作成されます。このユーザーは、IP アドレス192.0.2.0
から IP アドレス198.51.100.0
に接続する場合にのみ認証が可能となります。
Tip
passwordPrompt()
メソッドを様々なユーザー認証管理メソッドやコマンドと組み合わせて使用すると、メソッドやコマンドの呼び出しでパスワードを直接指定する代わりに、パスワードの入力を求めるプロンプトが表示されます。ただし、以前のバージョンの mongo
シェルと同様に、パスワードを直接指定することもできます。
use admin db.createUser( { user: "restricted", pwd: passwordPrompt(), // Or "<cleartext password>" roles: [ { role: "readWrite", db: "reporting" } ], authenticationRestrictions: [ { clientSource: ["192.0.2.0"], serverAddress: ["198.51.100.0"] } ] } )
SCRAM-SHA-256
認証情報のみを使用してユーザーを作成する
注意
SCRAM-SHA-256を使用するには、 featureCompatibilityVersion
を4.0
に設定する必要があります。featureCompatibilityVersion の詳細については、 Get FeatureCompatibilityVersion および setFeatureCompatibilityVersion
を参照してください。
次の操作では、 SCRAM-SHA-256
資格情報のみを持つユーザーが作成されます。
Tip
passwordPrompt()
メソッドを様々なユーザー認証管理メソッドやコマンドと組み合わせて使用すると、メソッドやコマンドの呼び出しでパスワードを直接指定する代わりに、パスワードの入力を求めるプロンプトが表示されます。ただし、以前のバージョンの mongo
シェルと同様に、パスワードを直接指定することもできます。
use reporting db.createUser( { user: "reportUser256", pwd: passwordPrompt(), // Or "<cleartext password>" roles: [ { role: "readWrite", db: "reporting" } ], mechanisms: [ "SCRAM-SHA-256" ] } )
authenticationMechanisms
パラメーターが設定されている場合は、 mechanisms
フィールドにはauthenticationMechanisms
パラメーターで指定された値のみを含めることができます。