#mongodb #access-control
#mongodb #управление доступом
Вопрос:
У меня есть база traffic
данных и в этих двух коллекциях readMe
и readWriteMe
. Я хочу создать пользователя, mongoDB
который может выполнять следующие действия —
- прочитайте
readMe
коллекцию. - чтение и запись в
readWriteMe
коллекцию. - может создавать новую коллекцию и иметь
readWrite
авторизацию для этой коллекции.
У меня есть роль myRole
— я попытался предоставить следующие привилегии этой роли
privileges: [
{ resource: { db: "traffic", collection: "" }, actions: [ "find", "insert", "remove" ] },
{ resource: { db: "traffic", collection: "readMe"}, actions: ["find"]},
]
но это также позволяет вставлять в readMe
коллекцию!
Возникает вопрос — что происходит в случае конфликтующих привилегий. Которому присвоен больший приоритет и т. Д.
Ответ №1:
Я думаю, это потому, что вы не указываете имя коллекции в первом разрешении. Попробуйте:
privileges: [
{ resource: { db: "traffic", collection: "readWriteMe" }, actions: [ "find", "insert", "remove" ] },
{ resource: { db: "traffic", collection: "readMe"}, actions: ["find"]}
]
Если вы хотите, чтобы один и тот же пользователь создавал коллекции и мог их перезаписывать, я думаю, что невозможно не предоставить достаточно привилегий, чтобы он не мог каким-то образом читать и записывать вашу readMe
коллекцию. Вы могли бы попробовать применить createCollection вместе с grantRole, но это позволило бы пользователю самостоятельно назначать себе роль ReadWrite и для коллекции readMe
Комментарии:
1. Приведенный выше набор привилегий даст мне
rw
право наreadWriteMe
иr
дляreadMe
, но не позволит мне создавать новые коллекции.2. О, извините, я не видел этого требования. Я обновлю свой ответ
3. Да, я попытался дать
createCollection
, и он действительно далrw
запросreadMe
тоже!