adminデータベースのsystem.rolesコレクションにはユーザー定義ロールが保存されています。 これらのユーザー定義ロールを作成および管理するために、MongoDB はロール マネジメント コマンドを提供します。
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.roleroleフィールドは、ロールの名前を指定するstringです。
admin.system.roles.dbdbフィールドは、ロールが属するデータベースを指定する string です。 MongoDB は、各ロールを名前の組み合わせ(つまり、role)とそのデータベース。
admin.system.roles.privilegesprivileges配列には、ロールの特権を定義する特権ドキュメントが含まれています。特権ドキュメントの構文は次のとおりです。
{ resource: { <resource> }, actions: [ "<action>", ... ] } 各特権ドキュメントには、次のフィールドがあります。
admin.system.roles.privileges[n].resource特権
actionsが適用されるリソースを指定するドキュメント。 ドキュメントには、次のいずれかの形式があります。{ db: <database>, collection: <collection> } or
{ cluster : true } 詳細については、 自己管理型配置に関するリソース ドキュメント を参照してください。
admin.system.roles.privileges[n].actionsリソースで許可されるアクションの配列。アクションのリストについては、特権アクションを参照してください。
admin.system.roles.rolesroles配列には、このロールが特権を継承するロールを指定する ロール ドキュメント が含まれています。ロール ドキュメントの構文は次のとおりです。
{ 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は特権を継承します。