db.updateUser()
定義
db.updateUser( username, update, writeConcern )
メソッドを実行するデータベース上のユーザーのプロファイルを更新します。フィールドを更新すると、前のフィールドの値が完全に置き換えられます。これには、ユーザーの
roles
配列の更新が含まれます。警告
roles
配列を更新すると、前の配列の値が完全に置き換えられます。 ユーザーの既存のロールすべてを置き換えずにロールを追加または排除するには、db.grantRolesToUser()
またはdb.revokeRolesFromUser()
メソッドを使用します。db.updateUser()
メソッドでは、次の構文を使用します。Tip
メソッドやコマンドの呼び出しでパスワードを直接指定する代わりに、
passwordPrompt()
メソッドをさまざまなユーザー認証や管理のメソッドやコマンドと組み合わせて使用すると、パスワードの入力を求めることができます。 ただし、mongo
shell の以前のバージョンと同様にパスワードを直接指定することもできます。db.updateUser( "<username>", { customData : { <any information> }, roles : [ { role: "<role>", db: "<database>" } | "<role>", ... ], pwd: passwordPrompt(), // Or "<cleartext password>" authenticationRestrictions: [ { clientSource: ["<IP>" | "<CIDR range>", ...], serverAddress: ["<IP>", | "<CIDR range>", ...] }, ... ], mechanisms: [ "<SCRAM-SHA-1|SCRAM-SHA-256>", ... ], passwordDigestor: "<server|client>" }, writeConcern: { <write concern> } ) db.updateUser()
メソッドには次の引数があります。Parameterタイプ説明username
string更新するユーザーの名前。update
ドキュメントユーザーの置換データを含むドキュメント。このデータは、ユーザーに対応するデータを完全に置き換えます。writeConcern
ドキュメント任意。 操作の 書込み保証( write concern ) のレベル。 詳しくは、 書込み保証(write concern) の仕様を参照してください。
update
ドキュメントでは、更新するフィールドとその新しい値を指定します。update
ドキュメントのすべてのフィールドは任意ですが、少なくとも 1 つのフィールドを含める必要があります。update
ドキュメントには、以下のフィールドがあります。フィールドタイプ説明customData
ドキュメント任意。任意の情報が含まれます。roles
配列任意。ユーザーに付与されたロール。roles
配列を更新すると、前の配列の値は上書きされます。pwd
string任意。ユーザーのパスワード。値は以下のいずれかになります。
クリアテキスト文字列のユーザーのパスワード
passwordPrompt()
で、ユーザーのパスワードの入力を求める
メソッドやコマンドの呼び出しでパスワードを直接指定する代わりに、
passwordPrompt()
メソッドをさまざまなユーザー認証や管理のメソッドやコマンドと組み合わせて使用すると、パスワードの入力を求めることができます。 ただし、mongo
shell の以前のバージョンと同様にパスワードを直接指定することもできます。authenticationRestrictions
配列任意。サーバーがユーザーに強制する認証制限。ユーザーによるサーバー接続が許可される、またはサーバーがユーザーを受け入れることができる IP アドレスと CIDR 範囲のリストを指定します。mechanisms
配列任意。特定の SCRAM メカニズムまたはユーザー認証情報のメカニズムです。
authenticationMechanisms
が指定されている場合は、authenticationMechanisms
のサブセットのみを指定できます。パスワードなしで mechanisms フィールドを更新する場合、ユーザーの現在のメカニズムのサブセットのみを指定でき、指定されたメカニズムの既存のユーザー認証情報のみが保持されます。
メカニズムに併せてパスワードを更新すると、ユーザーの新しい認証情報セットが保存されます。
有効な値は次のとおりです。
"SCRAM-SHA-1"
SHA-1
ハッシュ関数を使用します。
"SCRAM-SHA-256"
SHA-256
ハッシュ関数を使用します。featureCompatibilityVersion を
4.0
に設定する必要があります。passwordDigestor は必ず
server
にします。
passwordDigestor
string任意。サーバーまたはクライアントがパスワードをダイジェスト化するかどうかを示します。
使用可能な値は次のとおりです。
"server"
(デフォルト)- サーバーはクライアントからダイジェスト化されていないパスワードを受け取り、そのパスワードをダイジェスト化します。
"client"
(SCRAM-SHA-256
とは互換性がありません)- クライアントはパスワードをダイジェスト化し、ダイジェスト化されたパスワードをサーバーに渡します。
ロール
roles
フィールドでは、組み込みロールとユーザー定義ロールの両方を指定できます。
db.updateUser()
が実行されるのと同じデータベースに存在するロールを指定するには、ロールの名前を使用してロールを指定します。
"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.updateUser()
メソッドは、updateUser
コマンドをラップします。
互換性
このメソッドは、次の環境でホストされている配置で使用できます。
重要
このコマンドは、 MongoDB Atlasクラスターではサポートされていません。 すべてのコマンドの Atlas サポートの詳細については、「 サポートされていないコマンド 」を参照してください。
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
動作
レプリカセット
レプリカセットで実行する場合、 db.updateUser()
はデフォルトで"majority"
書込み保証を使用して実行されます。
暗号化
警告
デフォルトでは、 を使用している場合でも、db.updateUser()
は指定されたすべてのデータを MongoDBpasswordPrompt()
インスタンスにクリアテキストで送信します。TLS トランスポート暗号化を使用して、 db.updateUser()
によって送信されたパスワードを含む、クライアントとサーバー間の通信を保護します。 TLS トランスポート暗号化を有効にする手順については、「 TLS/SSL 用にmongod
とmongos
を構成する 」を参照してください。
MongoDB では、クリアテキストのパスワードはストアされません。パスワードが脆弱になるのは、クライアントとサーバー間の転送時と、TLS 転送暗号化が有効になっていない場合のみです。
必要なアクセス権
ユーザーの roles
配列を更新するには、すべてのデータベースに対する revokeRole
アクションを含むアクセス権が必要です。
ユーザーにロールを追加するには、ロールのデータベースに対して grantRole
アクションが必要です。
別のユーザーの pwd
フィールドまたは customData
フィールドを変更するには、そのユーザーのデータベースに対してそれぞれ changePassword
アクションと changeCustomData
アクションが必要です。
自分のパスワードとカスタム データを変更するには、ユーザーのデータベースに対してそれぞれ changeOwnPassword
および changeOwnCustomData
アクションを付与する特権が必要です。
例
products
データベースに次のユーザー情報を持つユーザー appClient01
がある場合:
{ _id : "products.appClient01", userId : UUID("c5d88855-3f1e-46cb-9c8b-269bef957986"), user : "appClient01", db : "products", customData : { empID : "12345", badge : "9156" }, roles : [ { role : "readWrite", db : "products" }, { role : "read", db : "inventory" } ], mechanisms : [ "SCRAM-SHA-1", "SCRAM-SHA-256" ], authenticationRestrictions : [ { clientSource: ["69.89.31.226"], serverAddress: ["172.16.254.1"] } ] }
次のdb.updateUser()
メソッドは、ユーザーのcustomData
とroles
データを完全に置き換えます。
use products db.updateUser( "appClient01", { customData : { employeeId : "0x3039" }, roles : [ { role : "read", db : "assets" } ] } )
products
データベース内のユーザー appClient01
には現在、次のユーザー情報があります。
{ _id : "products.appClient01", userId : UUID("c5d88855-3f1e-46cb-9c8b-269bef957986"), user : "appClient01", db : "products", customData : { employeeId : "0x3039" }, roles : [ { role : "read", db : "assets" } ], mechanisms : [ "SCRAM-SHA-1", "SCRAM-SHA-256" ], authenticationRestrictions : [ { clientSource: ["69.89.31.226"], serverAddress: ["172.16.254.1"] } ] }
SCRAM-SHA-256
認証情報のみを使用するようにユーザーを更新する
注意
SCRAM-SHA-256を使用するには、 featureCompatibilityVersion
を4.0
に設定する必要があります。featureCompatibilityVersion の詳細については、 Get FeatureCompatibilityVersion および setFeatureCompatibilityVersion
を参照してください。
次の操作では、現在 SCRAM-SHA-256
と SCRAM-SHA-1
の両方の認証情報を持っているユーザーを、SCRAM-SHA-256
認証情報のみを持つように更新します。
注意
パスワードが
mechanisms
と共に指定されていない場合は、ユーザーの現行の SCRAM メカニズムのサブセットにmechanisms
をアップデートできるのみです。パスワードを
mechanisms
と共に指定する場合は、サポートされている任意の SCRAM メカニズムを指定できます。SCRAM-SHA-256
の場合、passwordDigestor
はデフォルト値"server"
である必要があります。
use reporting db.updateUser( "reportUser256", { mechanisms: [ "SCRAM-SHA-256" ] } )