db.updateRole()
定義
db.updateRole( rolename, update, writeConcern )
ユーザー定義のロール を更新します。
db.updateRole()
メソッドは、ロールのデータベースで実行する必要があります。重要
mongosh メソッド
このページでは、
mongosh
メソッドについて記載しています。ただし、データベースコマンドや Node.js などの言語固有のドライバーのドキュメントには該当しません。データベースコマンドについては、
updateRole
コマンドを参照してください。MongoDB API ドライバーについては、各言語の MongoDB ドライバー ドキュメントを参照してください。
フィールドを更新すると、前のフィールドの値が 完全に置き換えられます。 すべての値を置き換えずにロールまたは特権を付与または排除するには、次のメソッドの 1 つ以上を使用します。
警告
privileges
またはroles
配列を更新すると、前の配列の値が 完全に置き換え られます。db.updateRole()
メソッドは次の構文を使用します。db.updateRole( "<rolename>", { privileges: [ { resource: { <resource> }, actions: [ "<action>", ... ] }, ... ], roles: [ { role: "<role>", db: "<database>" } | "<role>", ... ], authenticationRestrictions: [ { clientSource: ["<IP>" | "<CIDR range>", ...], serverAddress: ["<IP>", | "<CIDR range>", ...] }, ... ] }, { <writeConcern> } ) db.updateRole()
メソッドは次の引数を受け入れます。Parameterタイプ説明rolename
string
更新するユーザー定義ロールの名前。
update
ドキュメント
ロールの置換データを含むドキュメント。 このデータは、ロールに対応するデータを完全に置き換えます。
writeConcern
ドキュメント
任意。 操作の 書込み保証( write concern ) のレベル。 詳しくは、 書込み保証(write concern) の仕様を参照してください。
update
ドキュメントでは、更新するフィールドと新しい値を指定します。update
ドキュメントの各フィールドは任意ですが、ドキュメントには少なくとも 1 つのフィールドを含める必要があります。update
ドキュメントには以下のフィールドがあります。フィールドタイプ説明privileges
配列
任意。
roles
配列を指定しない場合は必須です。 ロールに付与する特権。privileges
配列を更新すると、前の配列の値は上書きされます。 特権を指定するための構文については、privileges
配列を参照してください。roles
配列
任意。
privileges
配列を指定しない場合は必須です。 このロールが特権を継承するロール。roles
配列を更新すると、前の配列の値は上書きされます。authenticationRestrictions
配列
任意。
サーバーがロールに強制する認証制限。このロールを付与されたユーザーが接続できる、または接続元として使用できる IP アドレスと CIDR 範囲のリストを指定します。
db.updateRole()
メソッドは、updateRole
コマンドをラップします。
互換性
このメソッドは、次の環境でホストされている配置で使用できます。
重要
このコマンドは、 MongoDB Atlasクラスターではサポートされていません。 すべてのコマンドの Atlas サポートの詳細については、「 サポートされていないコマンド 」を参照してください。
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
ロール
roles
フィールドでは、組み込みロールとユーザー定義ロールの両方を指定できます。
db.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 での認証の詳細については、「自己管理型配置での認証 」を参照してください。
動作
レプリカセット
レプリカセットで実行する場合、 db.updateRole()
はデフォルトで"majority"
書込み保証を使用して実行されます。
スコープ
admin
データベースで作成されたロールを除き、ロールにはそのデータベースに適用される権限のみを含めて、そのデータベース内の他のロールからのみ継承できます。
admin
データベースで作成されたロールには、admin
データベース、他のデータベース、またはクラスターリソースに適用する特権を含めることができ、admin
データベースだけでなく他のデータベースのロールからも継承できます。
必要なアクセス権
ロールを更新するには、すべてのデータベースに対してrevokeRole
アクションが必要です。
配列を更新するには、 roles
配列内の各ロールのデータベースに対して
grantRole
アクションが必要です。
配列を更新するには、 privileges
配列内の各特権のデータベースに対して
grantRole
アクションが必要です。 権限のリソースがデータベースにまたがる場合は、 admin
データベースにgrantRole
が必要です。 特権が次のいずれかである場合、特権はデータベースにまたがります。
すべてのデータベースのコレクション
すべてのコレクションとすべてのデータベース
cluster
リソース
ロールのauthenticationRestrictions
ドキュメントを更新するには、ターゲット ロールのデータベースに対して
setAuthenticationRestriction
アクションが必要です。
例
次のdb.updateRole()
メソッドは、 products
データベースに存在する
inventoryControl
ロールの
privileges
と
roles
を置き換えます。 このメソッドは、
inventoryControl
を含むデータベースで実行されます。
use products db.updateRole( "inventoryControl", { privileges: [ { resource: { db:"products", collection:"clothing" }, actions: [ "update", "createCollection", "createIndex"] } ], roles: [ { role: "read", db: "products" } ] }, { w:"majority" } )
ロールの特権を表示するには、 rolesInfo
コマンドを使用します。