Какие права пользователя MongoDB мне нужно добавить пользователя в новую/другую базу данных mongo?
Я включил аутентификацию в файле конфигурации MongoDB после добавления одного пользователя admin со следующими привилегиями:userAdmin
и userAdminAnyDatabase
.
теперь я подключаюсь с этим пользователем к БД, где этот пользователь admin определен (в противном случае я получаю exception: login failed
).
после успешного подключения я хочу добавить нового пользователя в новую базу данных. Для этого я пытаюсь:
use another
db.addUser(...)
но я получаю сообщение об ошибке:
Wed Dec 11 17:45:18.277 couldn't add user: not authorized for insert on app.system.users at src/mongo/shell/db.js:128
как создать новую базу данных и добавить к нему первого пользователя?
полная (все пользователи имеют 1234 в качестве пароля в этом примере)
$ mongo mono -u admin_all -p 1234
MongoDB shell version: 2.4.6
connecting to: mono
> db.system.users.find()
{ "_id" : ObjectId("52a9831de41eb640bb0f5f64"), "user" : "admin_all", "pwd" : "a6316ed4886c10663cce46bc216ea375", "roles" : [ "userAdmin", "userAdminAnyDatabase" ] }
{ "_id" : ObjectId("52a98404ef1f9bc934b62e11"), "user" : "admin_one", "pwd" : "884f516cf308a4c6a75bbc5a0a00807b", "roles" : [ "userAdmin" ] }
{ "_id" : ObjectId("52a98415ef1f9bc934b62e12"), "user" : "admin_any", "pwd" : "1616611df9b47c58b607054d384cab99", "roles" : [ "userAdminAnyDatabase" ] }
> use another
switched to db another
> db.addUser({ user: "user", pwd: "1234", roles: ["read"] })
{
"user" : "user",
"pwd" : "461d4f349d8d4ec3d22a4c945010c330",
"roles" : [
"read"
],
"_id" : ObjectId("52a985372fcdbfd033003a7e")
}
Thu Dec 12 10:43:19.091 couldn't add user: not authorized for insert on another.system.users at src/mongo/shell/db.js:128
1 ответов
ошибка заключалась в том, что я использовал userAdminAnyDatabase
пользователя не на adminдолжны база данных под названием admin на ваш сервер! Как говорится в документации для привилегий "AnyDatabase":
если вы добавите любую из этих ролей в документ привилегий пользователя вне базы данных администратора, привилегия не будет иметь никакого эффекта.
Итак, вы должны:
-
добавить
userAdminAnyDatabase
доadmin
db$ mongo admin > db.createUser({ user: "myadmin", pwd: "1234", roles: ["userAdminAnyDatabase"] })
-
включить проверку подлинности
auth = true setParameter = enableLocalhostAuthBypass=0
-
подключение с помощью нового
myadmin
пользователь в любую базу данных вы хотите и добавить других пользователей:$ mongo another -u myadmin -p 1234 > db.createUser({ user: "user", pwd: "1234", roles: ["readWrite"] })
или
> use another > db.createUser({ user: "user", pwd: "1234", roles: ["readWrite"] })