adminデータベースのsystem.rolesコレクションにはユーザー定義ロールが保存されています。 To create and manage these user-defined roles, MongoDB provides role management commands.
system.roles スキーマ
system.rolesコレクション内のドキュメントには次のスキーマがあります。
{ _id: <system-defined id>, role: "<role name>", db: "<database>", privileges: [ { resource: { <resource> }, actions: [ "<action>", ... ] }, ... ], roles: [ { role: "<role name>", db: "<database>" }, ... ] }
system.rolesドキュメントには次のフィールドがあります:
admin.system.roles.roleThe
rolefield is a string that specifies the name of the role.
admin.system.roles.dbThe
dbfield is a string that specifies the database to which the role belongs. MongoDB uniquely identifies each role by the pairing of its name (i.e.role) and its database.
admin.system.roles.privilegesThe
privilegesarray contains the privilege documents that define the privileges for the role.特権ドキュメントの構文は次のとおりです。
{ resource: { <resource> }, actions: [ "<action>", ... ] } 各特権ドキュメントには、次のフィールドがあります。
admin.system.roles.privileges[n].resourceA document that specifies the resources upon which the privilege
actionsapply. The document has one of the following form:{ db: <database>, collection: <collection> } or
{ cluster : true } 詳細については、 自己管理型配置に関するリソース ドキュメント を参照してください。
admin.system.roles.privileges[n].actionsリソースで許可されるアクションの配列。アクションのリストについては、特権アクションを参照してください。
admin.system.roles.rolesThe
rolesarray contains role documents that specify the roles from which this role inherits privileges.ロール ドキュメントの構文は次のとおりです。
{ role: "<role name>", db: "<database>" } ロール ドキュメントには、次のフィールドがあります。
admin.system.roles.roles[n].roleロールの名前。 ロールは、MongoDB によって提供される組み込みロールまたはユーザー定義のロールにすることができます。
例
adminデータベースのsystem.rolesコレクションにある次のサンプル ドキュメントを検討してみましょう。
ユーザー定義のロールは特権を指定します
以下は、 myAppデータベースに定義されたユーザー定義ロールappUserのサンプル ドキュメントです。
{ _id: "myApp.appUser", role: "appUser", db: "myApp", privileges: [ { resource: { db: "myApp" , collection: "" }, actions: [ "find", "createCollection", "dbStats", "collStats" ] }, { resource: { db: "myApp", collection: "logs" }, actions: [ "insert" ] }, { resource: { db: "myApp", collection: "data" }, actions: [ "insert", "update", "remove", "compact" ] }, { resource: { db: "myApp", collection: "system.js" }, actions: [ "find" ] }, ], roles: [] }
privileges配列には、 appUserロールが指定する 5 つの特権が列挙されています。
最初の特権は、システム コレクションを除く
myAppデータベース内のすべてのコレクションに対してそのアクション("find"、"createCollection"、"dbStats"、"collStats")を許可します。 「リソースとしてデータベースを指定する 」を参照してください。次の 2 つの特権により、
myAppデータベース内の特定のコレクション(logsとdata)に対する追加アクションが許可されます。 「データベースのコレクションをリソースとして指定 」を参照してください。最後の特権では、
myAppデータベース内の 1 つのシステム コレクションに対するアクションが許可されています。 最初の特権はfindアクションのデータベース全体の権限を付与しますが、そのアクションはmyAppのシステム コレクションには適用されません。 システム コレクションへのアクセスを許可するには、特権がコレクションを明示的に指定する必要があります。 自己管理型配置に関するリソース ドキュメントを参照してください。
空のroles配列が示すように、 appUserは他のロールから追加の特権を継承しません。
他のロールから継承するユーザー定義ロール
以下は、 myAppデータベースに対して定義されたユーザー定義ロールappAdminのサンプル ドキュメントです。このドキュメントでは、 appAdminロールが特権を指定し、他のロールから特権を継承することを示しています。
{ _id: "myApp.appAdmin", role: "appAdmin", db: "myApp", privileges: [ { resource: { db: "myApp", collection: "" }, actions: [ "insert", "dbStats", "collStats", "compact" ] } ], roles: [ { role: "appUser", db: "myApp" } ] }
privileges配列には、 appAdminロールが指定する権限が一覧表示されます。 このロールには、システム コレクションを除くmyAppデータベース内のすべてのコレクションに対してそのアクション( "insert" 、 "dbStats" 、 "collStats" 、 "compact" )を許可する単一の特権があります。 「リソースとしてデータベースを指定する 」を参照してください。
roles配列には、ロール名とデータベースで識別されるロールが一覧表示されています。ここからロールappAdminは特権を継承します。