Ошибка: не удалось добавить пользователя: не авторизовано в тесте для выполнения команды {createUser:
Я начинаю с MongoDB, и я бы хотел, чтобы пользователь/проходил доступ к dbs.
Первое, что я сделал, это создать пользователя и администратора и запустить mongodb с активацией auth, это мой созданный пользователь:
db.getUser("admin")
{
"_id" : "admin.admin",
"user" : "admin",
"db" : "admin",
"roles" : [
{
"role" : "dbAdminAnyDatabase",
"db" : "admin"
},
{
"role" : "clusterAdmin",
"db" : "admin"
}
] }
}
После этого я пытаюсь создать пользователей со следующими командами:
use newdb
db.createUser(
{
user: "newuser",
pwd: "12345678",
roles: [ { role: "readWrite", db: "newdb" } ]
}
)
Но я получил эту ошибку:
Ошибка: не удалось добавить пользователя: не авторизовано на newdb для выполнения команды { createUser: "newuser", pwd: "xxx", роли: [{role: "readWrite", db: "newdb" }], digestPassword: false, writeConcern: {w: "most", wtimeout: 30000.0}} в src/mongo/shell/db.js: 1004
У меня есть googled, но есть только два результата: один на китайском, а другой - не связанный, поэтому я немного потерялся. Есть идеи? Похоже, что у моего администратора нет привилегий, я обращаюсь к mongodb со следующей командой:
$mongo --port 27017 -u adminUser -p adminPass --authenticationDatabase admin
Спасибо заранее.
Ответы
Ответ 1
Остановить запуск экземпляра mongod
mongod --config /usr/local/etc/mongod.conf --auth
тогда начните без --auth
, как
mongod --config /usr/local/etc/mongod.conf
затем обновите свои роли как
db.updateUser( "admin", {role: [ "UserAdminAnyDatabase", "UserAdmin", "READWRITE", "dbAdmin", "clusterAdmin", "readWriteAnyDatabase", "dbAdminAnyDatabase" ]});
Теперь снова запустите mongod с помощью --auth
и попробуйте.
Идея заключается в том, что вы должны создать пользователя в базе данных "admin" со всеми ROLES, упомянутыми выше.
Но этот пользователь не является частью других баз данных. Итак, как только вы создали пользователя admin,
затем войдите в систему как пользователь этого admin,
СЕРВЕР: mongod --config/usr/local/etc/mongod.conf --auth
КЛИЕНТ:./mongodb/bin/mongo localhost: 27017/admin -u adminUser -p 123456
use APPLICATION_DB
снова создайте нового пользователя (скажем, APP_USER) для этого APPLICATION_DB. На этот раз для этого пользователя приложения вам потребуется только роль "dbOwner".
db.createUser({user:"test", pwd:"test", roles:['dbOwner']})
Теперь ваше приложение должно использовать этот APP_USER и APP_DB.
Ответ 2
В приведенной ниже команде говорится, что вы создали пользователя и пароль администратора.
db.getUser("admin")
{
"_id" : "admin.admin",
"user" : "admin",
"db" : "admin",
"roles" : [
{
"role" : "dbAdminAnyDatabase",
"db" : "admin"
},
{
"role" : "clusterAdmin",
"db" : "admin"
}
] }
}
После того, как вы создадите пользователя и пароль администратора, Mongo не позволит вам выполнять какое-либо обновление схемы, как обычно, пользователь admin, который вы ранее использовали для входа в систему.
Использовать вновь созданный пользователь и пароль администратора для создания новых пользователей или любых обновлений. Он должен работать.
Ответ 3
Вы должны выйти из текущего процесса mongod и снова перезапустить его без параметра -auth.
В Тип терминала: mongod
После запуска процесса mongod вы можете открыть новую вкладку терминала для запуска команды оболочки mongo:
mongo --shell
use new_your_database
db.createUser(
{
user: "mongo_admin",
pwd: "mongo_admin",
roles: [ "readWrite", "dbAdmin" ]
}
)
это должно быть сделано успешно....
Ответ 4
Если вы столкнулись с той же проблемой и имеете файл конфигурации для запуска mongod instances-, тогда продолжайте и выйдите из запущенного процесса mongod & в вашем файле конфигурации, убедитесь, что вы сделали security.authorization: отключено, кроме того, если вы Если у вас есть keyFile (то есть путь к файлу сертификата), затем прокомментируйте эту спецификацию, теперь запустите процесс mongod, используя этот файл конфигурации - вы сможете создать пользователя с помощью admin db.
Если вы работаете с набором реплик: Однажды, если вы закончили с созданием основного узла + пользователя, убедитесь, что вы инициируете и подключаетесь к набору реплик (который снова внутренне подключается к первичному узлу), здесь вы можете делать все с ранее созданным пользователем, но если вы снова подключитесь непосредственно к первичному узлу для выполнения нескольких команд, таких как rs.initiate()/rs.status()/show dbs/show users, вы в конечном итоге получите такие ошибки, как (нет аутентифицированных пользователей).
security:
authorization: disabled
# keyFile: /opt/mongodb/keyfile