MongoDB はロールベースの認可を通じてデータとコマンドへのアクセスを許可し、データベース システムで一般的に必要とされるさまざまなレベルのアクセスを提供する組み込みロールを提供します。 さらにユーザー定義のロール を作成することもできます。
ロールは定義されたリソースに対して一連のアクションを実行する権限を付与します。所定のロールは、そのロールが定義されているデータベースに適用され、コレクション レベルの詳細なアクセス権を付与できます。
システム コレクションには、次のものが含まれます。
<database>.system.*namespacelocal.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コレクション
clusterMonitorMongoDB Cloud ManagerやMongoDB Ops Managerモニタリングエージェントなどのモニタリング ツールへの読み取り専用アクセス権を提供します。
クラスター全体に対して次のアクションを許可します。
クラスター内のすべてのデータベースに対して次のアクションを許可します。
クラスター内のすべての
system.profileコレクションに対して、findアクションを許可します。configデータベースで、次のアクションを許可します。Resourceアクションconfigデータベース内のすべての非システムコレクションsystem.jsコレクションlocalデータベースで、次のアクションを許可します。
directShardOperationsMongoDB 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はコレクションの作成を試みます。 そのため、ユーザーはデータベースの コレクションに対してcreateCollectionconvertToCappedsystem.profile} アクションと アクションを実行するには追加の特権が必要です。組み込みロール
dbAdminとdbAdminAnyDatabaseには、いずれも追加の権限が付属します。--oplogReplay--oplogReplayを使用して実行するには、anyResourceに対してanyActionを持つユーザー定義ロールを作成します。--oplogReplayでmongorestoreを実行する必要があるユーザーにのみ付与しますクラスター全体に対して次のアクションを提供します。
すべての非システム コレクションに次のアクションを提供します。
system.jsコレクションに対して次のアクションを提供します。anyResourceに次のアクションを提供します。configデータベースおよびlocalデータベース上のすべての非システム コレクションに対して次のアクションを提供します。次のアクションを提供します
admin.system.version次のアクションを提供します
admin.system.rolesadmin.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 を除くすべてのデータベースに適用される権限を提供します。
readAnyDatabaselocalデータベースとconfigデータベースを除くすべてのデータベースに対して、readと同じ読み取り専用権限を提供します。また、このロールはクラスター全体を対象としたlistDatabasesアクションも提供します。clusterManagerデータベースとclusterMonitorデータベースにアクセスするには、config} ロールとlocalロールも参照してください。
readWriteAnyDatabaselocalデータベースとconfigデータベースを除く全データベースにreadWriteと同じ権限を提供します。また、このロールは、次のものも提供します。クラスター全体に対する
listDatabasesアクション
clusterManagerデータベースとclusterMonitorデータベースにアクセスするには、config} ロールとlocalロールも参照してください。
userAdminAnyDatabaselocalデータベースとconfigデータベースを除く全データベースでuserAdminと同じユーザ管理操作を行う権限を提供します。userAdminAnyDatabaseクラスターに対する次の権限アクションも提供します。このロールは
adminデータベースのsystem.usersコレクションとsystem.rolesコレクション、および MongoDB 2.6 以前のバージョンのレガシーsystem.usersコレクションに対して、次の権限アクションを提供します。userAdminAnyDatabaseロールはユーザーが付与できる権限を制限しません。その結果、userAdminAnyDatabaseユーザーは、ロールがユーザー管理を超える権限を明示的に承認していなくても、現在の権限を超える権限を自分自身に付与したり、すべての権限を自分自身に付与したりすることができます。このロールは実質的に MongoDB システムのスーパーユーザーです。clusterManagerデータベースとclusterMonitorデータベースにアクセスするには、config} ロールとlocalロールも参照してください。
dbAdminAnyDatabaselocalデータベースとconfigデータベースを除く全データベースにdbAdminと同じ権限を提供します。また、このロールはクラスター全体を対象としたlistDatabasesアクションも提供します。clusterManagerデータベースとclusterMonitorデータベースにアクセスするには、config} ロールとlocalロールも参照してください。MongoDB 5.0 以降、
dbAdminAnyDatabaseには applyOps 権限アクションが含まれます。
スーパーユーザー ロール
いくつかのロールでは、間接的または直接的なシステム全体のスーパーユーザー アクセス権が提供されます。
次のロールは、任意のデータベースに対する任意の権限を、任意のユーザーに提供します。つまり、ユーザーがこれらのロールのいずれかを持っている場合、任意のデータベースに対する任意の権限を自分自身に割り当てることができるます。
次のロールはすべてのリソースに対する完全な権限を提供します。
root以下のロールの操作とすべてのリソースへのアクセス権を組み合わせて提供します。
また、次の特権アクションも提供します。
system.コレクションのvalidateMongoDB8.0 以降では になります。これにより、ユーザーが実行するすべてのクエリで
bypassDefaultMaxTimeMSdefaultMaxTimeMSの値が無視されます。
内部ロール
__systemMongoDB は、レプリカセット ノードや
mongosインスタンスなどのクラスター ノードを表すオブジェクトに、このロールを割り当てます。このロールの所有者は、データベース内の任意のオブジェクトに対して任意のアクションを実行することができます。例外的な状況を除き、アプリケーションまたは人間の管理者を表すユーザーオブジェクトにこのロールを割り当てないでください。
例として
applyOpsコマンドを実行するなど、すべてのリソースのすべてのアクションにアクセスする必要がある場合は、このロールを割り当てないでください。代わりにユーザー定義ロールを作成してanyResourceに対してanyActionを付与し、これらのオペレーションにアクセスする必要のあるユーザーのみがこのアクセス権を持つようにします。