Я создал пользователя-администратора для mongo, используя следующие инструкции:
http://docs.mongodb.org/manual/tutorial/add-user-administrator/
Из клиента mongo похоже, что я могу аутентифицироваться:
> use admin
switched to db admin
> db.auth('admin','SECRETPASSWORD');
1
>
Но по-другому подключиться не могу. Например:
mongo -u admin -p СЕКРЕТНЫЙ ПАРОЛЬ
выдает ошибку:
JavaScript execution failed: Error: 18 { code: 18, ok: 0.0, errmsg: "auth fails" } at src/mongo/shell/db.js:L228
У меня auth = true
в etc/mongod.conf
.
Что мне не хватает?
db.changeUserPassword("admin", "password")
изменить пароль для каждой базы данных.Ответы:
Аутентификация управляется на уровне базы данных. Когда вы пытаетесь подключиться к системе с помощью базы данных, mongo фактически проверяет учетные данные, которые вы предоставляете в коллекции
<database>.system.users
. Итак, в основном, когда вы пытаетесь подключиться к «тесту», он ищет учетные данныеtest.system.users
и возвращает ошибку, потому что не может их найти (поскольку они хранятся вadmin.system.users
). Право читать и писать из всех баз данных не означает, что вы можете напрямую подключаться к ним.Сначала вам необходимо подключиться к базе данных, содержащей учетные данные. Пытаться:
Для получения дополнительной информации проверьте это http://docs.mongodb.org/manual/reference/privilege-documents/
источник
Я также получил эту ошибку, мне нужно было указать базу данных, в которой хранились данные аутентификации пользователя:
Обновление 18 ноября 2017 г .:
это лучшее решение. Mongo предложит вам ввести пароль, таким образом вы не будете помещать свой пароль в виде открытого текста в историю оболочки, что является ужасной практикой безопасности.
источник
Возможно, вам потребуется обновить оболочку mongo. У меня была локальная версия оболочки mongo 2.4.9, и я получил эту ошибку при попытке подключиться к базе данных mongo 3. Обновление версии оболочки до 3 решило проблему.
источник
Я знаю, что это может показаться очевидным, но мне также пришлось использовать одиночные кавычки вокруг u / n и p / w, прежде чем это сработало.
источник
mongo -u <myuser> -p <mypasswd
не работал. Почемуadmin
здесь разница?В MongoDB 3.0 теперь поддерживается несколько механизмов аутентификации.
Если вы начали с новой базы данных 3.0 с созданием новых пользователей, они были бы созданы с помощью SCRAM-SHA-1.
Итак, вам понадобится драйвер, способный к такой аутентификации:
http://docs.mongodb.org/manual/release-notes/3.0-scram/#considerations-scram-sha-1-drivers
Если бы у вас была база данных, обновленная с версии 2.x с существующими пользовательскими данными, они все равно будут использовать MONGODB-CR, и необходимо будет обновить базу данных аутентификации пользователей:
http://docs.mongodb.org/manual/release-notes/3.0-scram/#upgrade-mongodb-cr-to-scram
Теперь для подключения к MongoDB 3.0 с пользователями, созданными с помощью SCRAM-SHA-1, требуется указать базу данных аутентификации (через клиент mongo из командной строки) и использовать другие механизмы при использовании драйвера.
$> mongo -u ПОЛЬЗОВАТЕЛЬ -p ПАРОЛЬ --authenticationDatabase admin
В этом случае для аутентификации будет использоваться база данных «admin», которая также используется по умолчанию.
источник
Перейдите в оболочку терминала и введите
mongo
.Затем введите
use db_name
.Затем введите:
db.createUser( { user: "mongodb", pwd: "dogmeatsubparflavour1337", roles: [ { role: "dbOwner", db: "db_name" } ] } )
Также попробуйте:
db.getUsers()
const MongoClient = require('mongodb').MongoClient; // MongoDB Connection Info const url = 'mongodb://mongodb:dogmeatsubparflavour1337@stackoverflow.com:27017/?authMechanism=DEFAULT&authSource=db_name'; // Additional options: https://docs.mongodb.com/manual/reference/connection-string/#connection-string-options // Use Connect Method to connect to the Server MongoClient.connect(url) .then((db) => { console.log(db); console.log('Casually connected correctly to server.'); // Be careful with db.close() when working asynchronously db.close(); }) .catch((error) => { console.log(error); });
источник
mongo 'mongodb://localhost:27017/admin' -u admin -p
2. Затем переключитесь на целевую базу данных:> use targetDb
3. Затем добавьте пользователя> db.createUser(...)
Она возникает проблема заключается в том , что пользователь , созданный с помощью метода , описанного в Монго документации , не имеет разрешения на подключение к базе данных по умолчанию (тест), даже если пользователь был создан с «userAdminAnyDatabase» и ролями «dbAdminAnyDatabase».
источник
Другая возможность: при создании пользователя вы могли случайно
use
использовать базу данныхadmin
, отличную от той, которую вы хотели. Вам нужно установить--authenticationDatabase
базу данных, в которой был фактически создан пользователь.mongodb
кажется,test
по умолчанию помещает вас в базу данных, когда вы открываете оболочку, поэтому вам нужно будет писать,--authenticationDatabase test
а не--authenticationDatabase admin
если вы случайноuse
ошиблисьtest
при запускеdb.createUser(...)
.Предполагая, что у вас есть доступ к машине, на которой запущен экземпляр mongodb, y можно отключить авторизацию в
/etc/mongod.conf
(закомментировать,authorization
который вложен в безопасность), а затем перезапустить сервер, а затем запустить:И вы можете получить что-то вроде этого:
{ "_id" : "test.myusername", "user" : "myusername", "db" : "test", "roles" : [ { "role" : "dbOwner", "db" : "mydatabasename" } ], "mechanisms" : [ "SCRAM-SHA-1", "SCRAM-SHA-256" ] }
Обратите внимание, что
db
значение равноtest
. Это потому, что когда я создавал пользователя, я сначала не запускалuse admin
илиuse desiredDatabaseName
. Таким образом, вы можете удалить пользователя с помощью,db.dropUser("myusername")
а затем создать другого пользователя в нужной базе данных, например:Надеюсь, это поможет кому-то, кто был в моем положении как новичок, с этим.
источник
Это своего рода частный случай, но на случай, если кто-то столкнется с моей проблемой:
В MongoHQ он покажет вам поле под названием «пароль», но на самом деле это просто хеш пароля. Вам нужно будет добавить нового пользователя и сохранить пароль в другом месте (потому что MongoHQ не покажет его вам).
источник
Правильный способ входа в оболочку mongo:
mongo localhost: 27017 -u 'uuuuu' -p '> xxxxxx' --authenticationDatabase имя базы данных
источник
Вы также можете попробовать это: -
mongo localhost:27017/admin -u admin -p SECRETPASSWORD
Нашел в этом посте
Здесь очевидно, что localhost может быть другим хостом, а / admin может быть какой-то другой базой данных, к которой была применена аутентификация.
источник
Проверьте версию mongo клиента, с которого мы подключаемся к серверу mongo.
В моем случае сервер mongo имел версию Mongo4.0.0, но мой клиент был версии 2.4.9. Обновите версию mongo, чтобы обновить mongo cli.
источник