Ошибка: не удалось добавить пользователя: не авторизовано в тесте для выполнения команды {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