db.createUser()
定義
db.createUser(user, writeConcern)
メソッドが実行されるデータベースに新しいユーザーを作成します。
db.createUser()
は、ユーザーがデータベースに既に存在する場合、重複ユーザーエラーを返します。db.createUser()
メソッドの構文は次のとおりです。フィールドタイプ説明user
ドキュメント
作成するユーザーに関する認証およびアクセス情報を含むドキュメントを参照してください。
writeConcern
ドキュメント
任意。 操作の書込み保証( write concern ) のレベル。 詳しくは、 書込み保証(write concern) の仕様を参照してください。
user
ドキュメントはユーザーを定義し、形式は以下のとおりです。Tip
メソッドやコマンドの呼び出しでパスワードを直接指定する代わりに、
passwordPrompt()
メソッドをさまざまなユーザー認証や管理のメソッドやコマンドと組み合わせて使用すると、パスワードの入力を求めることができます。 ただし、mongo
shell の以前のバージョンと同様にパスワードを直接指定することもできます。{ 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
ユーザーのパスワード。
pwd
db.createUser()
$external
データベースで を実行して、 MongoDBの外部に保存される認証情報を持つユーザーを作成する場合、 フィールドは必要ありません。値は以下のいずれかになります。
クリアテキスト文字列のユーザーのパスワード
passwordPrompt()
で、ユーザーのパスワードの入力を求める
メソッドやコマンドの呼び出しでパスワードを直接指定する代わりに、
passwordPrompt()
メソッドをさまざまなユーザー認証や管理のメソッドやコマンドと組み合わせて使用すると、パスワードの入力を求めることができます。 ただし、mongo
shell の以前のバージョンと同様にパスワードを直接指定することもできます。customData
ドキュメント
任意。任意の情報が含まれます。このフィールドは、データ管理者がこの特定のユーザーに関連付けたいデータを保存するために使用できます。たとえば、ユーザーの氏名や従業員 ID などがあります。
roles
配列
ユーザーに付与されたロールです。空の配列
[]
を指定すると、ロールのないユーザーも作成できます。配列
任意。作成されたユーザーにサーバーが強制する認証制限です。ユーザーによるサーバー接続が許可される、またはサーバーがユーザーを受け入れることができる IP アドレスと CIDR範囲のリストを指定します。
バージョン 3.6 の新機能。
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
とは互換性がありません)- クライアントはパスワードをダイジェスト化し、ダイジェスト化されたパスワードをサーバーに渡します。
ロール
roles
フィールドでは、組み込みロールとユーザー定義ロールの両方を指定できます。
db.createUser()
が実行されるのと同じデータベースに存在するロールを指定するには、ロールの名前を使用してロールを指定します。
"readWrite"
または、次のように、ドキュメントを使用してロールを指定することもできます。
{ role: "<role>", db: "<database>" }
別のデータベースに存在するロールを指定するには、 ドキュメントを使用してロールを指定します。
認証の制限
バージョン 3.6 の新機能。
authenticationRestrictions
ドキュメントには、次のフィールドのみを含めることができます。 authenticationRestrictions
ドキュメントに認識されないフィールドが含まれている場合、サーバーはエラーをスローします。
フィールド名 | 値 | 説明 |
---|---|---|
| IP アドレスおよび/またはCIDR範囲の配列 | 存在する場合、サーバーはユーザーを認証する際に、クライアントの IP アドレスが指定されたリストに含まれているか、リスト内の CIDR 範囲に属していることを確認します。 クライアントの IP アドレスが存在しない場合、サーバーはユーザーを認証しません。 |
| IP アドレスおよび/またはCIDR範囲の配列 | クライアントが接続できる IP アドレスまたは CIDR 範囲のリスト。 存在する場合、サーバーはクライアントの接続が指定されたリスト内の IP アドレス経由で受け入れられたことを確認します。 認識されない IP アドレス経由で接続が受け入れられた場合、サーバーはユーザーを認証しません。 |
重要
ユーザーが互換性のない認証制限を持つ複数のロールを継承した場合、そのユーザーは使用できなくなります。
たとえば、ユーザーが、 clientSource
フィールドが["198.51.100.0"]
であるロールと、 clientSource
フィールドが["203.0.113.0"]
である別のロールを継承した場合、サーバーはユーザーを認証できません。
MongoDB での認証の詳細については、「認証 」を参照してください。
db.createUser()
メソッドは、createUser
コマンドをラップします。
互換性
このメソッドは、次の環境でホストされている配置で使用できます。
重要
このコマンドは、 MongoDB Atlasクラスターではサポートされていません。 すべてのコマンドの Atlas サポートの詳細については、「 サポートされていないコマンド 」を参照してください。
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
動作
ユーザー 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
shell の以前のバージョンと同様にパスワードを直接指定することもできます。
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
shell の以前のバージョンと同様にパスワードを直接指定することもできます。
use products db.createUser( { user: "accountUser", pwd: passwordPrompt(), // Or "<cleartext password>" roles: [ "readWrite", "dbAdmin" ] } )
ロールのないユーザーの作成
次の操作では、 admin
データベースに reportsUser
という名前のユーザーが作成されますが、ロールはまだ割り当てられません。
Tip
メソッドやコマンドの呼び出しでパスワードを直接指定する代わりに、 passwordPrompt()
メソッドをさまざまなユーザー認証や管理のメソッドやコマンドと組み合わせて使用すると、パスワードの入力を求めることができます。 ただし、 mongo
shell の以前のバージョンと同様にパスワードを直接指定することもできます。
use admin db.createUser( { user: "reportsUser", pwd: passwordPrompt(), // Or "<cleartext password>" roles: [ ] } )
ロールのある管理者ユーザーの作成
次の操作では、admin
データベースに appAdmin
という名前のユーザーが作成され、このユーザーに config
データベースへの readWrite
アクセス権が付与されます。これにより、このユーザーはバランサー設定など、シャーディングされたクラスターの一部の設定を変更することが出来ます。
Tip
メソッドやコマンドの呼び出しでパスワードを直接指定する代わりに、 passwordPrompt()
メソッドをさまざまなユーザー認証や管理のメソッドやコマンドと組み合わせて使用すると、パスワードの入力を求めることができます。 ただし、 mongo
shell の以前のバージョンと同様にパスワードを直接指定することもできます。
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
shell の以前のバージョンと同様にパスワードを直接指定することもできます。
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 の詳細については、 「 FeatureCompatibilityVersion の表示 」と「 setFeatureCompatibilityVersion
」を参照してください。
次の操作では、 SCRAM-SHA-256
資格情報のみを持つユーザーが作成されます。
Tip
メソッドやコマンドの呼び出しでパスワードを直接指定する代わりに、 passwordPrompt()
メソッドをさまざまなユーザー認証や管理のメソッドやコマンドと組み合わせて使用すると、パスワードの入力を求めることができます。 ただし、 mongo
shell の以前のバージョンと同様にパスワードを直接指定することもできます。
use reporting db.createUser( { user: "reportUser256", pwd: passwordPrompt(), // Or "<cleartext password>" roles: [ { role: "readWrite", db: "reporting" } ], mechanisms: [ "SCRAM-SHA-256" ] } )
authenticationMechanisms
パラメーターが設定されている場合は、 mechanisms
フィールドにはauthenticationMechanisms
パラメーターで指定された値のみを含めることができます。