db.updateRole()
定義
db.updateRole( rolename, update, writeConcern )
Updates a user-defined role.
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
ドキュメントに認識されないフィールドが含まれている場合、サーバーはエラーをスローします。
フィールド名 | 値 | 説明 |
---|---|---|
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.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
コマンドを使用します。