MongoDB はロールベースの認可を通じてデータとコマンドへのアクセスを許可し、データベース システムで一般的に必要とされるさまざまなレベルのアクセスを提供する組み込みロールを提供します。 さらにユーザー定義のロール を作成することもできます。
ロールは定義されたリソースに対して一連のアクションを実行する権限を付与します。所定のロールは、そのロールが定義されているデータベースに適用され、コレクション レベルの詳細なアクセス権を付与できます。
システム コレクションには、次のものが含まれます。
- <database>.system.*namespace
- local.replset.*レプリカセットの名前空間
詳細については、「システム コレクション 」を参照してください。
非システム コレクションは、前のリストの名前空間にないコレクションです。
MongoDB の組み込みロールのそれぞれは、ロールのデータベース内のすべての非システム コレクションに対するデータベース レベルのアクセスと、すべての システム コレクション に対するコレクション レベルのアクセスを定義します。
このセクションでは、各組み込みロールの特権について説明します。また、 showPrivilegesフィールドとshowBuiltinRolesフィールドの両方をtrueに設定して rolesInfo コマンドを発行すると、いつでも組み込みロールの特権を表示できます。
MongoDB Atlas の組み込みロール
MongoDB Atlasのデータベースユーザーは、セルフホスト型配置とは異なる組み込みロールを持ちますが、それぞれの配置タイプの組み込みロールは、同じ権限アクションセットからビルドされます。
MongoDB Atlasでホストされている配置の組み込みデータベースユーザーロールについては、「 Atlas の組み込みのロールと特権 」を参照してください。
MongoDB Atlas ユーザー インターフェースで、データベースユーザーを作成し、組み込みロールを割り当てることができます。 詳細については、「データベース ユーザーの追加 」を参照してください。
データベース組み込みロール
MongoDB は、セルフホスト型配置で次の組み込みロールを提供します。
- データベースユーザーとデータベース管理のロールを特定のデータベースに設定する 
- adminデータベース上の他のすべてのロールのみ
データベースユーザー ロール
すべてのデータベースに次のクライアント ロールが含まれます。
- read
- すべての非システム コレクションと - system.jsコレクションのデータを読み取る機能を提供します。- 注意- このロールでは - system.namespacesコレクションに直接アクセスする権限は付与されません。- このロールは次のアクションを許可することで読み取りアクセス権を提供します。 - ユーザーに - listDatabases権限アクションがない場合、ユーザーは- listDatabasesコマンドを実行して、ユーザーが権限を持つデータベースのリストを返すことができます(ユーザーが特定のコレクションに対して権限を持つデータベースを含みます)。ただし、このコマンドが- authorizedDatabasesオプションを指定しないか、- trueに設定して実行する場合に限られます。
データベース管理ロール
すべてのデータベースには、次のデータベース管理ロールが含まれます。
- dbAdmin
- スキーマ関連のタスク、インデックスの作成、統計の収集などの管理タスクを実行する機能を提供します。このロールでは、ユーザーおよびロール マネジメントの権限は付与されません。 - 具体的には、ロールは次の権限を提供します。 Resource許可されたアクション- 非システム コレクション(すなわちデータベース リソース) 
- dbOwner
- データベース所有者は、データベースに対してあらゆる管理アクションを実行できます。このロールは、 - readWrite、- dbAdmin、- userAdminの各ロールによって付与される権限を組み合わせたものです。
- userAdmin
- 現在のデータベースでロールとユーザーを作成および変更する能力を提供します。 - userAdminロールでは、ユーザー自身を含むユーザーに任意の権限を付与できるため、間接的にデータベース、あるいは- adminデータベースにデータベースにスコープを設定した場合はクラスターに スーパーユーザー アクセス権を付与します。- userAdminロールは、次のアクションを明示的に提供します。- 警告- userAdminロールの付与がセキュリティに与える影響を理解することが重要です。データベースに対してこのロールを持つユーザーは、そのデータベース上で自分自身に任意の権限を付与できます。- userAdminロールを- adminデータベースに対して付与すると、間接的にクラスターに対するスーパーユーザー アクセス権を付与することになるため、セキュリティ上の影響がさらに大きくなります。- adminスコープの- userAdminロールを付与されたユーザーは、クラスター全体に- userAdminAnyDatabaseなどのロールや権限を付与できます。
クラスター管理ロール
admin データベースには、単一のデータベースではなくシステム全体の管理のため、次のロールが含まれています。これらのロールには、レプリカセットやシャーディングされたクラスターの管理機能が含まれますが、これらに限定されません。
- clusterAdmin
- クラスター マネジメントへの最大のアクセスを提供します。このロールは、 - clusterManager、- clusterMonitor、および- hostManagerロールによって付与される権限を組み合わせたものです。 さらに、このロールは- dropDatabaseアクションを提供します。
- clusterManager
- クラスターに対するマネジメントおよびモニタリングのアクションを提供します。このロールを持つユーザーは、それぞれシャーディングとレプリケーションで使用される - configデータベースと- localデータベースにアクセスできます。さらに、このロールは- querySettingsアクションを提供します。Resourceアクション- すべて databases - clusterManagerは、- configデータベースと- localデータベースに追加の権限を提供します。- configデータベースで、次のアクションを許可します。Resourceアクション- configデータベース内のすべての非システムコレクション- localデータベースで、次のアクションを許可します。Resourceアクション- localデータベース内のすべての非システムコレクション- system.replsetコレクション
- clusterMonitor
- MongoDB Cloud ManagerやMongoDB Ops Managerモニタリングエージェントなどのモニタリング ツールへの読み取り専用アクセス権を提供します。 - クラスター全体に対して次のアクションを許可します。 - クラスター内のすべてのデータベースに対して次のアクションを許可します。 - クラスター内のすべての - system.profileコレクションに対して、- findアクションを許可します。- configデータベースで、次のアクションを許可します。Resourceアクション- configデータベース内のすべての非システムコレクション- system.jsコレクション- localデータベースで、次のアクションを許可します。
- directShardOperations
- MongoDB 8.0 以降では、 - directShardOperationsロールを使用して、メンテナンス操作を実行できます。その操作では、シャードに対してコマンドを直接実行する必要があります。- 警告- directShardOperationsロールを使用して コマンドを実行すると、クラスターが正しく動作しなくなり、データが破損する可能性があります。- directShardOperationsロールは、メンテナンス目的で、または MongoDB サポートのガイダンスに必ず従う必要があります。 メンテナンス操作を実行したら、- directShardOperationsロールの使用を停止します。
- enableSharding
- コレクションのシャーディングを有効にし、既存のシャードキーを変更する機能を提供します。 - すべての非システム コレクションに次のアクションを提供します。 - moveCollection(MongoDB 8.0 以降)
- unshardCollection(MongoDB 8.0 以降)
 
- hostManager
- サーバーをモニターおよび管理する能力を提供します。 - クラスター全体では、次のアクションを提供します。 - rotateCertificates(バージョン 5.0 の新機能)
 - クラスター内のすべてのデータベースで、次のアクションを実行します。 
- searchCoordinator
- __mdb_internal_searchデータベースに対する- readAnyDatabase特権と書込み権限を提供します。- 重要- __mdb_internal_searchデータベースの内容は変更しないでください。- クラスター 全体では、次のアクションを提供します。 
バックアップと復旧ロール
admin データベースには、データのバックアップと復元のため、次のロールが含まれています。
- backup
- データのバックアップに必要な最小限の権限を付与します。このロールは MongoDB Cloud Manager バックアップエージェント、 MongoDB Ops Manager バックアップエージェント、または - mongodumpを使用して- mongodインスタンス全体をバックアップするのに十分な権限を提供します。- configデータベースの- settingsコレクションに対して- insertアクションおよび- updateアクションを提供します。- anyResourceで提供するのは、- listDatabasesアクション
- listCollectionsアクション
- listIndexesアクション
- listSearchIndexesアクション
 - クラスター全体で提供するのは、 - findアクションを次に対して提供します。- クラスター内のすべての非システム コレクション( - configデータベースおよび- localデータベース内のコレクションを含む)
- クラスター内の次のシステム コレクション。 
- admin.system.usersコレクションおよび- admin.system.rolesコレクション
- config.settingsコレクション
- MongoDB 2.6 以前のバージョンのレガシー - system.usersコレクション
 - insertコレクションに対して- updateアクションおよび- config.settingsアクションを提供します。- backupロールは、データベース プロファイリングの実行中に存在する- system.profileコレクションをバックアップするための追加の権限を提供します。
- restore
- 非システム コレクションに - convertToCappedを提供します。- データに - system.profileコレクション データを含まずに- --oplogReplayオプションなしで- mongorestoreを実行する場合に、バックアップからデータを復元するために必要な権限が提供されます。- バックアップ データに - system.profileコレクション データが含まれている場合や- --oplogReplayを使用して実行する場合は、追加の権限が必要です。- system.profile- バックアップ データに - system.profileコレクション データが含まれており、ターゲット データベースに- system.profileコレクションが含まれていない場合、プログラムでは実際に- system.profileドキュメントを復元していないにもかかわらず、- mongorestoreはコレクションの作成を試みます。 そのため、ユーザーはデータベースの コレクションに対して- createCollection- convertToCapped- system.profile} アクションと アクションを実行するには追加の特権が必要です。- 組み込みロール - dbAdminと- dbAdminAnyDatabaseには、いずれも追加の権限が付属します。- --oplogReplay- --oplogReplayを使用して実行するには、- anyResourceに対して- anyActionを持つユーザー定義ロールを作成します。- --oplogReplayで- mongorestoreを実行する必要があるユーザーにのみ付与します- クラスター全体に対して次のアクションを提供します。 - すべての非システム コレクションに次のアクションを提供します。 - system.jsコレクションに対して次のアクションを提供します。- anyResourceに次のアクションを提供します。- configデータベースおよび- localデータベース上のすべての非システム コレクションに対して次のアクションを提供します。- 次のアクションを提供します - admin.system.version- 次のアクションを提供します - admin.system.roles- admin.system.usersコレクションおよびレガシー- system.usersコレクションに対して次のアクションを提供します。- restoreには通常の変更操作を使用して- admin.system.usersコレクション内のドキュメントを変更する機能が含まれていますが、これらのデータは必ず ユーザー管理メソッド を使用して変更してください。- <database>.system.viewsコレクションに次のアクションを提供します。- dropCollection(MongoDB 6.0 以降)
 - クラスター全体では、次のアクションを提供します。 - bypassWriteBlockingMode(MongoDB 6.0 以降)
- setUserWriteBlockMode(MongoDB 6.0 以降)
 
全データベース ロール
admin データベースでは次のロールを使用でき、local と config を除くすべてのデータベースに適用される権限を提供します。
- readAnyDatabase
- localデータベースと- configデータベースを除くすべてのデータベースに対して、- readと同じ読み取り専用権限を提供します。また、このロールはクラスター全体を対象とした- listDatabasesアクションも提供します。- clusterManagerデータベースと- clusterMonitorデータベースにアクセスするには、- config} ロールと- localロールも参照してください。
- readWriteAnyDatabase
- localデータベースと- configデータベースを除く全データベースに- readWriteと同じ権限を提供します。また、このロールは、次のものも提供します。- クラスター全体に対する - listDatabasesアクション
 - clusterManagerデータベースと- clusterMonitorデータベースにアクセスするには、- config} ロールと- localロールも参照してください。
- userAdminAnyDatabase
- localデータベースと- configデータベースを除く全データベースで- userAdminと同じユーザ管理操作を行う権限を提供します。- userAdminAnyDatabaseクラスターに対する次の権限アクションも提供します。- このロールは - adminデータベースの- system.usersコレクションと- system.rolesコレクション、および MongoDB 2.6 以前のバージョンのレガシー- system.usersコレクションに対して、次の権限アクションを提供します。- userAdminAnyDatabaseロールはユーザーが付与できる権限を制限しません。その結果、- userAdminAnyDatabaseユーザーは、ロールがユーザー管理を超える権限を明示的に承認していなくても、現在の権限を超える権限を自分自身に付与したり、すべての権限を自分自身に付与したりすることができます。このロールは実質的に MongoDB システムのスーパーユーザーです。- clusterManagerデータベースと- clusterMonitorデータベースにアクセスするには、- config} ロールと- localロールも参照してください。
- dbAdminAnyDatabase
- localデータベースと- configデータベースを除く全データベースに- dbAdminと同じ権限を提供します。また、このロールはクラスター全体を対象とした- listDatabasesアクションも提供します。- clusterManagerデータベースと- clusterMonitorデータベースにアクセスするには、- config} ロールと- localロールも参照してください。- MongoDB 5.0 以降、 - dbAdminAnyDatabaseには applyOps 権限アクションが含まれます。
スーパーユーザー ロール
いくつかのロールでは、間接的または直接的なシステム全体のスーパーユーザー アクセス権が提供されます。
次のロールは、任意のデータベースに対する任意の権限を、任意のユーザーに提供します。つまり、ユーザーがこれらのロールのいずれかを持っている場合、任意のデータベースに対する任意の権限を自分自身に割り当てることができるます。
次のロールはすべてのリソースに対する完全な権限を提供します。
- root
- 以下のロールの操作とすべてのリソースへのアクセス権を組み合わせて提供します。 - また、次の特権アクションも提供します。 - system.コレクションの- validate
- MongoDB8.0 以降では になります。これにより、ユーザーが実行するすべてのクエリで - bypassDefaultMaxTimeMS- defaultMaxTimeMSの値が無視されます。
 
内部ロール
- __system
- MongoDB は、レプリカセット ノードや - mongosインスタンスなどのクラスター ノードを表すオブジェクトに、このロールを割り当てます。このロールの所有者は、データベース内の任意のオブジェクトに対して任意のアクションを実行することができます。- 例外的な状況を除き、アプリケーションまたは人間の管理者を表すユーザーオブジェクトにこのロールを割り当てないでください。 - 例として - applyOpsコマンドを実行するなど、すべてのリソースのすべてのアクションにアクセスする必要がある場合は、このロールを割り当てないでください。代わりにユーザー定義ロールを作成して- anyResourceに対して- anyActionを付与し、これらのオペレーションにアクセスする必要のあるユーザーのみがこのアクセス権を持つようにします。