MongoDB-администратор пользователь не авторизован
Я пытаюсь добавить авторизацию к моему MongoDB.
Я делаю все это на Linux с MongoDB 2.6.1.
Мою команду mongod.файл conf находится в старом формате совместимости
(вот как это произошло с установкой).
1) я создал администратора пользователя, как описано здесь в (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
пользователь, которого я создал, не имеет никаких разрешений.
root@test02:~# 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
пользователь должен быть уполномочен делать все, чтобы
затем он может создать других пользователей и предоставить им более конкретные разрешения.
9 ответов:
Я также почесывал голову вокруг той же проблемы, и все работало после того, как я установил роль root при добавлении первого пользователя admin.
use admin db.createUser( { user: "admin", pwd: "password", roles: [ { role: "root", db: "admin" } ] } ); exit;
полный справочник по настройке аутентификации см. В разделе шаги я собрал после нескольких часов исследований через интернет.
Это немного запутанно-я считаю, что вам нужно будет предоставить себе readWrite для запроса базы данных. Пользователь с dbadmin или useradmin может администрировать базу данных (включая предоставление себе дополнительных прав), но не может выполнять запросы или записывать данные.
Так что предоставьте себе readWrite, и вы должны быть в порядке -
http://docs.mongodb.org/manual/reference/built-in-roles/#readWrite
возможно, быстрый пример того, как изменить текущего пользователя будет полезен кому-то. Это то, что я на самом деле ищу.
следуя совету @JohnPetrone я добавил readWrite роль моего пользователя admin grantRolesToUser
> use admin > db.grantRolesToUser("admin",["readWrite"]) > show collections system.users system.version
вы можете попробовать: с помощью -- authenticationDatabase флаг помогает.
mongo --port 27017 -u "admin" -p "password" --authenticationDatabase "admin"
Я знаю, что этот ответ приходит очень поздно в этой теме, но я надеюсь, что вы это проверите.
причина, по которой вы получаете эту ошибку, основана на конкретной роли, которую вы предоставили пользователю, которую вы собрали к настоящему времени, и да, давая этому пользователю роль
root
решит вашу проблему, но вы должны сначала понять, что именно делают эти роли, прежде чем предоставлять их пользователям.в учебнике вы предоставили пользователю
userAdminAnyDatabase
роль, которая в основном дает пользователю возможность управлять пользователями всех ваших баз данных. То, что вы пытались сделать с вашим пользователем, было вне его определения роли.The
root
роль эта роль включена в его определение, а такжеreadWriteAnyDatabase
,dbAdminAnyDatabase
и другие роли, делающие его суперпользователем (в основном потому, что вы можете делать с ним что угодно).вы можете проверить определения ролей, чтобы увидеть, какие роли вам нужно будет предоставить пользователям для завершения определенных задачи. https://docs.mongodb.com/manual/reference/built-in-roles/ Не рекомендуется делать всех ваших пользователей супер:)
кроме того, обратите внимание, что если ваш клиент Mongo shell не удается правильно подключиться к
mongod
экземпляр, вы можете получить такие ошибки "отказано в разрешении".убедитесь, что ваш клиент открывает соединение, проверив порт подключения, но также и порт, который вы используете в
mongod
не используется. Вы можете установить другой порт с помощью--port <port>
параметр как в оболочке, так и в процессе.
Это простой вопрос.
- важно, что вы должны переключить целевой db не админ.
используйте yourDB
- проверьте аутентификацию БД с помощью
пользователи
- Если вы получаете {} пустой объект, который является вопросом. Вам просто нужно ввести
дБ.createUser( { пользователь: "вашего", фрд: "пароль", роли: ["readWrite", " dbAdmin" ] })
или
дБ.grantRolesToUser ('yourUser', [{ роль: "dbAdmin", db:" yourDB"}])
У меня была аналогичная проблема здесь, в среде Windows: я установил Bitnami DreamFactory, а также установил другой MongoDb, который запускается при загрузке системы. Я запускал свой MongoDbService (который был запущен без каких-либо ошибок), но я заметил, потеряв много времени, что я на самом деле подключался к сервису MongoDB Bitnami. Пожалуйста, посмотрите, если на вашем сервере нет другого экземпляра mongoDB.
Удачи!