MongoDB - пользователь admin не авторизовался
Я пытаюсь добавить авторизацию в мой MongoDB.
Я делаю все это на Linux с MongoDB 2.6.1.
Мой файл mongod.conf находится в старом формате совместимости
(так оно и было с установкой).
1) Я создал пользователя admin, как описано здесь в (3)
http://docs.mongodb.org/manual/tutorial/add-user-administrator/
2) Затем я отредактировал mongod.conf, раскомментировав эту строку
auth = true
3) Наконец, я перезагрузил службу mongod, и я попытался войти в систему:
/usr/bin/mongo localhost:27017/admin -u sa -p pwd
4) Я могу подключиться, но он говорит об этом при подключении.
MongoDB shell version: 2.6.1
connecting to: localhost:27017/admin
Welcome to the MongoDB shell!
The current date/time is: Thu May 29 2014 17:47:16 GMT-0400 (EDT)
Error while trying to show server startup warnings: not authorized on admin to execute command { getLog: "startupWarnings" }
5) Теперь кажется, что этот пользователь sa
, который я создал, вообще не имеет прав.
[email protected]:~# mc
MongoDB shell version: 2.6.1
connecting to: localhost:27017/admin
Welcome to the MongoDB shell!
The current date/time is: Thu May 29 2014 17:57:03 GMT-0400 (EDT)
Error while trying to show server startup warnings: not authorized on admin to execute command { getLog: "startupWarnings" }
[admin] 2014-05-29 17:57:03.011 >>> use admin
switched to db admin
[admin] 2014-05-29 17:57:07.889 >>> show collections
2014-05-29T17:57:10.377-0400 error: {
"$err" : "not authorized for query on admin.system.namespaces",
"code" : 13
} at src/mongo/shell/query.js:131
[admin] 2014-05-29 17:57:10.378 >>> use test
switched to db test
[test] 2014-05-29 17:57:13.466 >>> show collections
2014-05-29T17:57:15.930-0400 error: {
"$err" : "not authorized for query on test.system.namespaces",
"code" : 13
} at src/mongo/shell/query.js:131
[test] 2014-05-29 17:57:15.931 >>>
В чем проблема? Я повторил всю эту процедуру 3 раза и
Я думаю, что сделал все это, как указано в документах MongoDB. Но это не работает.
Я ожидал, что этому пользователю sa
будет разрешено делать что-либо, чтобы
он может затем создавать других пользователей и предоставлять им более конкретные разрешения.
Ответы
Ответ 1
Я также ломал голову над той же проблемой, и все работало после того, как я установил роль как root при добавлении первого пользователя-администратора.
use admin
db.createUser(
{
user: 'admin',
pwd: 'password',
roles: [ { role: 'root', db: 'admin' } ]
}
);
exit;
Если вы уже создали пользователя с правами admin
, вы можете изменить роль следующим образом:
use admin;
db.grantRolesToUser('admin', [{ role: 'root', db: 'admin' }])
Для получения полной информации о настройке аутентификации см. Шаги, которые я скомпилировал после нескольких часов исследований в Интернете.
Ответ 2
Это немного запутанно - я считаю, что вам нужно предоставить readWrite для запроса базы данных. Пользователь с dbadmin или useradmin может администрировать базу данных (включая предоставление дополнительных прав), но не может выполнять запросы или записывать данные.
так что дайте себе readWrite, и вы должны быть в порядке -
http://docs.mongodb.org/manual/reference/built-in-roles/#readWrite
Ответ 3
Возможно, быстрый пример того, как изменить текущего пользователя, будет полезен кому-то. Это то, что я действительно искал.
Следуя советам @JohnPetrone, я добавил readWrite роль моего администратора с помощью grantRolesToUser.
> use admin
> db.grantRolesToUser("admin",["readWrite"])
> show collections
system.users
system.version
Ответ 4
Вы можете попробовать: использование флажка --authenticationDatabase.
mongo --port 27017 -u "admin" -p "password" --authenticationDatabase "admin"
Ответ 5
Я знаю, что этот ответ будет опубликован в этой теме очень поздно, но я надеюсь, что вы его проверите
Причина, по которой вы получаете эту ошибку, основана на конкретной роли, которую вы предоставили пользователю, которую вы уже собрали, и да, предоставление этому пользователю роли root
решит вашу проблему, но вы должны сначала понять, что именно выполняют эти роли, прежде чем предоставлять их. их пользователям.
В руководстве вы предоставили пользователю роль userAdminAnyDatabase
которая в основном дает пользователю возможность управлять пользователями всех ваших баз данных. То, что вы пытались сделать со своим пользователем, было вне определения его роли.
Эта роль включена в определение root
роли, а также readWriteAnyDatabase
, dbAdminAnyDatabase
и других ролей, делающих ее суперпользователем (в основном потому, что с ней можно делать все что угодно).
Вы можете проверить определения ролей, чтобы увидеть, какие роли вам нужно предоставить пользователям для выполнения определенных задач. https://docs.mongodb.com/manual/reference/built-in-roles/ Не рекомендуется делать всех ваших пользователей супер :)
Ответ 6
У меня была аналогичная проблема в среде Windows: я установил Bitnami DreamFactory, а также установил еще один MongoDb, который запускается при загрузке системы. Я запускал свой MongoDbService (который был запущен без какой-либо ошибки), но я заметил, потеряв много времени, что я фактически подключился к Bitnami MongoDb Service. Пожалуйста, обратите внимание, если на вашем сервере нет другого экземпляра mongoDB.
Удачи!
Ответ 7
Кроме того, обратите внимание, что если ваш клиент оболочки mongo не сможет правильно подключиться к экземпляру mongod
, вы можете получить такие ошибки с разрешением отказа.
Убедитесь, что ваш клиент открывает соединение, проверяя порт подключения, но также, что порт, который вы используете в mongod
, не используется. Вы можете установить другой порт с помощью параметра --port <port>
как в оболочке, так и в процессе.
Ответ 8
Это простой вопрос.
- Важно, чтобы вы переключили целевой db, а не admin.
использовать свой DB
- проверьте вашу аутентификацию БД по
показать пользователям
- Если вы получили {} пустой объект, это вопрос. Вам просто нужно ввести
db.createUser({пользователь: "yourUser", pwd: "пароль", роли: ["readWrite", "dbAdmin"]})
или же
db.grantRolesToUser('yourUser', [{role: "dbAdmin", db: "yourDB"}])
Ответ 9
У меня была эта проблема, потому что имя хоста в моем MongoDB Compass указывало на admin вместо моего проекта. Исправлено добавлением /projectname после имени хоста :) Попробуйте это:
- Выберите свой проект на веб-сайте MongoDB atlas
- Подключение/Подключение с MongoDB Compass
- Скачать компас/выбрать ОС
- Я использовал Компас 1.12 или позже
- Скопируйте строку подключения под Компас 1.12 или выше.
- Открыть MongoDB Compass/Подключиться (вверху слева)/Подключиться к
- Строка подключения обнаружена/Да/
- Добавьте имя вашего проекта после имени хоста: cluster9-foodie.mongodb.net/имя проекта
- Подключите и протестировал API с POSTMAN.
- Добиться успеха.
Используйте ту же строку подключения в вашем коде:
- До:
- mongodb + srv://имя проекта: пароль @cluster9-foodie.mongodb.net/admin
- После:
- mongodb + srv://имя проекта: пароль @cluster9-foodie.mongodb.net/имя проекта
Удачи.
Ответ 10
использовать mydb
db.createUser({пользователь: "тест", pwd: "секрет", роли: ["readWrite", "dbAdmin"], passwordDigestor: "сервер"})
Ответ 11
У меня была такая же проблема, и в моем случае она была вызвана переменной mongodb_security_authorization, для которой было установлено значение "включено", я исправил ее, изменив это:
mongodb_security_authorization: "enabled"
к этому:
mongodb_security_authorization: "disabled"
Ответ 12
Согласился с тем, что вам необходимо пройти аутентификацию на уровне администратора базы данных, и ему нужна как минимум роль с правильными привилегиями, которая позволит избежать "исключения локального хоста" из БД (это для локального размещения mongoDB), хотя у вас все есть на месте и до сих пор получение неавторизованных исключений почти для каждой команды при доступе к mongoDB, который был создан с использованием Mongo Atlas, и вот где вы можете узнать причину, почему:
https://dba.stackexchange.com/questions/219003/not-authorized-on-admin-to-execute-command-mongodb-atlas-m0-free-tier-cluster?newreg=471a9a26108243d78d4ca74a87e7a115
и также проверьте это, если вы размещали mongoDB на Монго Атласе:
https://docs.atlas.mongodb.com/unsupported-commands/
Ответ 13
У меня была та же проблема. Во время работы mongod я достал --auth, и он предоставил временное решение.
Ответ 14
Use Admin :
use admin
Create a super user :
db.createUser(
{
user: "master",
pwd: "[email protected]",
roles: [
{
role: "readWriteAnyDatabase",
db: "admin"
},
{
"role" : "dbAdminAnyDatabase",
"db" : "admin"
},
{
"role" : "clusterAdmin",
"db" : "admin"
},
"userAdminAnyDatabase"
]
}
)
Ответ 15
Это может быть из-за того, что вы не установили noAuth = true в файле mongodb.conf
# Turn on/off security. Off is currently the default
noauth = true
#auth = true
После настройки этого перезапуска служба, использующая
перезагрузка службы mongod