Docs Menu
Docs Home
/
MongoDBマニュアル
/ / /

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ロールのprivilegesrolesを置き換えます。 このメソッドは、 inventoryControlを含むデータベースで実行されます。

use products
db.updateRole(
"inventoryControl",
{
privileges:
[
{
resource: { db:"products", collection:"clothing" },
actions: [ "update", "createCollection", "createIndex"]
}
],
roles:
[
{
role: "read",
db: "products"
}
]
},
{ w:"majority" }
)

ロールの特権を表示するには、 rolesInfoコマンドを使用します。

戻る

db.revokeRolesFromRole