db.createRole()
定義
db.createRole(role, writeConcern)
データベースにロールを作成します。ロールの権限を指定するには、権限を明示的に一覧表示するか、ロールに他のロールから権限を継承させるか、あるいはその両方を行います。ロールは、メソッドを実行するデータベースに適用されます。
重要
mongosh メソッド
このページでは、
mongosh
メソッドについて説明します。ただし、データベースコマンドや Node.js などの言語固有のドライバーのドキュメントには該当しません。データベースコマンドについては、
createRole
コマンドを参照してください。MongoDB API ドライバーについては、各言語の MongoDB ドライバー ドキュメントを参照してください。
db.createRole()
メソッドは次の引数を受け入れます。Parameterタイプ説明role
ドキュメントロールの名前とロール定義を含むドキュメント。writeConcern
ドキュメント任意。 操作の 書込み保証( write concern ) のレベル。 詳しくは、 書込み保証(write concern) の仕様を参照してください。
role
ドキュメントには、次の形式があります。{ role: "<name>", privileges: [ { resource: { <resource> }, actions: [ "<action>", ... ] }, ... ], roles: [ { role: "<role>", db: "<database>" } | "<role>", ... ], authenticationRestrictions: [ { clientSource: ["<IP>" | "<CIDR range>", ...], serverAddress: ["<IP>" | "<CIDR range>", ...] }, ... ] } role
ドキュメントには、以下のフィールドがあります。フィールドタイプ説明role
string新しいロールの名前。privileges
配列ロールに付与する特権。特権は、リソースと許可されたアクションから構成されます。権限の構文については、
privileges
配列を参照してください。privileges
フィールドを含める必要があります。特権を指定しない場合は、空の配列を使用します。roles
配列このロールが特権を継承するロールの配列。
roles
フィールドを含める必要があります。継承するロールを指定しない場合は、空の配列を使用します。authenticationRestrictions
配列任意。
サーバーがロールに強制する認証制限。このロールを付与されたユーザーが接続できる、または接続元として使用できる IP アドレスと CIDR 範囲のリストを指定します。
バージョン 3.6 の新機能。
ロール
roles
フィールドでは、組み込みロールとユーザー定義ロールの両方を指定できます。
db.createRole()
が実行されるのと同じデータベースに存在するロールを指定するには、ロールの名前を使用してロールを指定します。
"readWrite"
または、次のように、ドキュメントを使用してロールを指定することもできます。
{ role: "<role>", db: "<database>" }
別のデータベースに存在するロールを指定するには、 ドキュメントを使用してロールを指定します。
認証の制限
バージョン 3.6 の新機能。
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.createRole()
はデフォルトで"majority"
書込み保証を使用して実行されます。
スコープ
admin
データベースで作成されたロールを除き、ロールにはそのデータベースに適用される権限のみを含めて、そのデータベース内の他のロールからのみ継承できます。
admin
データベースで作成されたロールには、admin
データベース、他のデータベース、またはクラスターリソースに適用する特権を含めることができ、admin
データベースだけでなく他のデータベースのロールからも継承できます。
db.createRole()
メソッドは、そのロールがデータベース内に既に存在する場合、重複ロールエラーを返します。
必要なアクセス権
データベースにロールを作成するには、以下が必要です。
組み込みロール userAdmin
と userAdminAnyDatabase
は、それぞれのリソース上で createRole
および grantRole
のアクションを提供します。
authenticationRestrictions
を指定してロールを作成するには、ロールが作成されるデータベース リソース上のsetAuthenticationRestriction
アクションが必要です。
例
次の db.createRole()
メソッドは、admin
データベースに myClusterwideAdmin
ロールを作成します。
use admin db.createRole( { role: "myClusterwideAdmin", privileges: [ { resource: { cluster: true }, actions: [ "addShard" ] }, { resource: { db: "config", collection: "" }, actions: [ "find", "update", "insert", "remove" ] }, { resource: { db: "users", collection: "usersCollection" }, actions: [ "update", "insert", "remove" ] }, { resource: { db: "", collection: "" }, actions: [ "find" ] } ], roles: [ { role: "read", db: "admin" } ] }, { w: "majority" , wtimeout: 5000 } )