定義
- updateRole
- ユーザー定義のロール を更新します。 - updateRoleコマンドは、ロールのデータベースで実行する必要があります。- Tip- mongoshでは、このコマンドは- db.updateRole()ヘルパー メソッドを通じて実行することもできます。- ヘルパー メソッドは - mongoshユーザーには便利ですが、データベースコマンドと同じレベルの情報は返されない可能性があります。 便宜上必要ない場合、または追加の戻りフィールドが必要な場合は、 データベースコマンドを使用します。- フィールドを更新すると、前のフィールドの値が 完全に置き換えられます。 すべての値を置き換えずにロールまたは特権を付与または排除するには、次のコマンドの 1 つ以上を使用します。 - 警告- privilegesまたは- roles配列を更新すると、前の配列の値が 完全に置き換え られます。
互換性
このコマンドは、次の環境でホストされている配置で使用できます。
- MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン 
- MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン 
重要
このコマンドは、 MongoDB Atlasクラスターではサポートされていません。 すべてのコマンドの Atlas サポートの詳細については、「 サポートされていないコマンド 」を参照してください。
構文
ロールを更新するには、 privileges配列、 roles配列、またはその両方を指定する必要があります。
コマンドは、次の構文を使用します。
db.runCommand(    {      updateRole: "<role>",      privileges:          [            { resource: { <resource> }, actions: [ "<action>", ... ] },            ...          ],      roles:          [            { role: "<role>", db: "<database>" } | "<role>",            ...          ],      authenticationRestrictions:          [            {              clientSource: ["<IP>" | "<CIDR range>", ...],              serverAddress: ["<IP>", ...]            },            ...          ]      writeConcern: <write concern document>,      comment: <any>    }  ) 
コマンドフィールド
このコマンドは、次のフィールドを使用します。
| フィールド | タイプ | 説明 | 
|---|---|---|
| 
 | string | 更新するユーザー定義のロールの名前。 | 
| 
 | 配列 | 任意。  | 
| 
 | 配列 | 任意。  | 
| 
 | 配列 | 任意。 サーバーがロールに強制する認証制限。このロールを付与されたユーザーが接続できる、または接続元として使用できる IP アドレスと CIDR 範囲のリストを指定します。 | 
| 
 | ドキュメント | 任意。 操作の 書込み保証( write concern ) のレベル。 詳しくは、 書込み保証(write concern) の仕様を参照してください。 | 
| 
 | any | 任意。このコマンドに添付するユーザー指定のコメント。設定すると、このコメントは以下の場所にこのコマンドの記録と合わせて表示されます。 
 コメントには、有効な BSON 型(string, integer, object, array など)を使用できます。 | 
ロール
rolesフィールドでは、組み込みロールとユーザー定義ロールの両方を指定できます。
updateRoleが実行されるのと同じデータベースに存在するロールを指定するには、ロールの名前を使用してロールを指定します。
"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 での認証の詳細については、「自己管理型配置での認証 」を参照してください。
動作
ロールの特権は、ロールが作成されたデータベースに適用されます。 ロールはデータベース内の他のロールから特権を継承することができます。 adminデータベースで作成されたロールには、すべてのデータベースまたはクラスターに適用する特権を含めることができ、他のデータベースのロールから特権を継承できます。
必要なアクセス権
ロールを更新するには、すべてのデータベースに対してrevokeRoleアクションが必要です。
配列を更新するには、 roles配列内の各ロールのデータベースに対してgrantRoleアクションが必要です。
配列を更新するには、 privileges配列内の各特権のデータベースに対してgrantRoleアクションが必要です。 権限のリソースがデータベースにまたがる場合は、 adminデータベースにgrantRoleが必要です。 特権が次のいずれかである場合、特権はデータベースにまたがります。
- すべてのデータベースのコレクション 
- すべてのコレクションとすべてのデータベース 
- clusterリソース
ロールのauthenticationRestrictionsドキュメントを更新するには、ターゲット ロールのデータベースに対してsetAuthenticationRestrictionアクションが必要です。
例
以下は、 adminデータベースのmyClusterwideAdminロールを更新するupdateRoleコマンドの例です。 privileges配列とroles配列はどちらも任意ですが、少なくとも 2 つのうち 1 つが必要です。
db.adminCommand(    {      updateRole: "myClusterwideAdmin",      privileges:          [            {              resource: { db: "", collection: "" },              actions: [ "find" , "update", "insert", "remove" ]            }          ],      roles:          [            { role: "dbAdminAnyDatabase", db: "admin" }          ],      writeConcern: { w: "majority" }    } ) 
ロールの特権を表示するには、 rolesInfoコマンドを使用します。