updateUser
定義
updateUser
Updates the user's profile on the database on which you run the command. An update to a field completely replaces the previous field's values, including updates to the user's
roles
andauthenticationRestrictions
arrays.Tip
mongosh
では、このコマンドはdb.changeUserPassword()
ヘルパー メソッドを通じて実行することもできます。ヘルパー メソッドは
mongosh
ユーザーには便利ですが、データベースコマンドと同じレベルの情報は返されない可能性があります。 便宜上必要ない場合、または追加の戻りフィールドが必要な場合は、 データベースコマンドを使用します。警告
When you update the
roles
array, you completely replace the previous array's values. To add or remove roles without replacing all the user's existing roles, use thegrantRolesToUser
orrevokeRolesFromUser
commands.To update a user, you must specify the
updateUser
field and at least one other field, other thanwriteConcern
.
互換性
このコマンドは、次の環境でホストされている配置で使用できます。
MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです
重要
このコマンドは、M0、M2、M5、M10+、および Flex クラスターではサポートされていません。詳細については、「 サポートされていないコマンド 」を参照してください。
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
構文
The command uses the following syntax:
db.runCommand( { updateUser: "<username>", 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-mechanism>", ... ], digestPassword: <boolean>, writeConcern: { <write concern> }, comment: <any> } )
コマンドフィールド
このコマンドは、次のフィールドを使用します。
フィールド | タイプ | 説明 |
---|---|---|
| string | 更新するユーザーの名前。 |
| string | 任意。ユーザーのパスワード。値は以下のいずれかになります。
|
| ドキュメント | 任意。任意の情報が含まれます。 |
| 配列 | 任意。ユーザーに付与されたロール。 |
| ドキュメント | 任意。 操作の 書込み保証( write concern ) のレベル。 詳しくは、 書込み保証(write concern) の仕様を参照してください。 |
| 配列 | 任意。サーバーがユーザーに強制する認証制限です。ユーザーによるサーバー接続が許可される、またはサーバーがユーザーを受け入れることができる IP アドレス リストと CIDR 範囲を指定します。 |
| 配列 | 任意。特定の SCRAM メカニズムまたはユーザー認証情報のメカニズムです。 パスワードなしで mechanisms フィールドを更新する場合、ユーザーの現在のメカニズムのサブセットのみを指定でき、指定されたメカニズムの既存のユーザー認証情報のみが保持されます。 メカニズムに併せてパスワードを更新すると、ユーザーの新しい認証情報セットが保存されます。 有効な値は次のとおりです。
|
| ブール値 | 任意。サーバーまたはクライアントがパスワードをダイジェスト化するかどうかを示します。 If If |
| any | 任意。このコマンドに添付するユーザー指定のコメント。設定すると、このコメントは以下の場所にこのコマンドの記録と合わせて表示されます。
コメントには、有効な BSON 型(string, integer, object, array など)を使用できます。 |
ロール
roles
フィールドでは、組み込みロールとユーザー定義ロールの両方を指定できます。
updateUser
が実行されるのと同じデータベースに存在するロールを指定するには、ロールの名前を使用してロールを指定します。
"readWrite"
または、次のように、ドキュメントを使用してロールを指定することもできます。
{ role: "<role>", db: "<database>" }
別のデータベースに存在するロールを指定するには、 ドキュメントを使用してロールを指定します。
認証の制限
authenticationRestrictions
ドキュメントには、次のフィールドのみを含めることができます。 authenticationRestrictions
ドキュメントに認識されないフィールドが含まれている場合、サーバーはエラーをスローします。
フィールド名 | 値 | 説明 |
---|---|---|
| IP アドレスおよび/またはCIDR範囲の配列 | 存在する場合、サーバーはユーザーを認証する際に、クライアントの IP アドレスが指定されたリストに含まれているか、リスト内の CIDR 範囲に属していることを確認します。 クライアントの IP アドレスが存在しない場合、サーバーはユーザーを認証しません。 |
| IP アドレスおよび/またはCIDR範囲の配列 | クライアントが接続できる IP アドレスまたは CIDR 範囲のリスト。 存在する場合、サーバーはクライアントの接続が指定されたリスト内の IP アドレス経由で受け入れられたことを確認します。 認識されない IP アドレス経由で接続が受け入れられた場合、サーバーはユーザーを認証しません。 |
重要
ユーザーが互換性のない認証制限を持つ複数のロールを継承した場合、そのユーザーは使用できなくなります。
たとえば、ユーザーが、 clientSource
フィールドが["198.51.100.0"]
であるロールと、 clientSource
フィールドが["203.0.113.0"]
である別のロールを継承した場合、サーバーはユーザーを認証できません。
MongoDB での認証の詳細については、「自己管理型配置での認証 」を参照してください。
動作
警告
デフォルトでは、 を使用している場合でも、updateUser
は指定されたすべてのデータを MongoDBpasswordPrompt()
インスタンスにクリアテキストで送信します。TLS トランスポート暗号化を使用して、 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" ] }
The following updateUser
command completely replaces the
user's customData
and roles
data:
use products db.runCommand( { 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" ] }