Я пытаюсь добавить авторизацию к моей 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
пользователю будет разрешено делать все, чтобы
он мог затем создавать других пользователей и давать им более конкретные разрешения.
Ответы:
Я также ломал голову над той же проблемой, и все работало после того, как я установил роль как root при добавлении первого администратора.
Если вы уже создали
admin
пользователя, вы можете изменить роль следующим образом:Для полной ссылки настройки аутентификации, см. Шаги, которые я скомпилировал после нескольких часов исследований в Интернете.
источник
userAdminAnyDatabase
вместоroot
?db.grantRolesToUser('admin',[{ role: "root", db: "admin" }])
db.grantRolesToUser('admin',[{ role: "root", db: "admin" }])
, и это заставляет меня путать. Я не авторизован для запуска команды, и все же я могу запустить команду, чтобы получить права root, а затем запустить эту команду. Очень странно: Sdb.grantRolesToUser('admin',[{ role: "root", db: "admin" }])
ничего не вышло, убедитесь, что вы переключились обратно наuse admin
... была такая же проблема, как только я переключился обратно, это сработало какЭто немного сбивает с толку - я считаю, что вам нужно предоставить себе readWrite для запроса базы данных. Пользователь с dbadmin или useradmin может администрировать базу данных (включая предоставление себе дополнительных прав), но не может выполнять запросы или записывать данные.
так что дайте себе readWrite, и все будет в порядке -
http://docs.mongodb.org/manual/reference/built-in-roles/#readWrite
источник
Возможно, кому-то будет полезен быстрый пример того, как изменить текущего пользователя. Это то, что я действительно искал.
Следуя совету @JohnPetrone, я добавил роль readWrite для моего администратора с помощью grantRolesToUser.
источник
Вы можете попробовать: Использование флага --authenticationDatabase помогает.
источник
Я знаю, что этот ответ будет опубликован в этой теме очень поздно, но я надеюсь, что вы его проверите.
Причина, по которой вы получаете эту ошибку, основана на конкретной роли, которую вы предоставили пользователю, которую вы уже собрали, и да, предоставление этому пользователю роли
root
решит вашу проблему, но вы должны сначала понять, что именно выполняют эти роли, прежде чем предоставлять их. пользователям.В учебном пособии вы предоставили пользователю
userAdminAnyDatabase
роль, которая в основном дает пользователю возможность управлять пользователями всех ваших баз данных. То, что вы пытались сделать со своим пользователем, было вне определения его роли.root
Роль играет эту роль , включив в него определение, а такжеreadWriteAnyDatabase
,dbAdminAnyDatabase
и другие роли , делая его суперпользователя ( в основном потому , что вы можете сделать что - нибудь с ним).Вы можете проверить определения ролей, чтобы увидеть, какие роли вам нужно предоставить пользователям для выполнения определенных задач. https://docs.mongodb.com/manual/reference/built-in-roles/ Не рекомендуется делать всех ваших пользователей супер :)
источник
show collections
), вы должны предоставить ему эту возможность и больше ничегоroles: [ { role: "read", db: "admin" } ]
. Обратите внимание, что здесь читается роль, это зависит от базы данных, и вы ничего не можете сделать, кроме этого. Проверьте эту ссылку для других ролей docs.mongodb.com/manual/reference/built-in-rolesЭто простой вопрос.
или
источник
У меня была похожая проблема здесь, в среде Windows: я установил Bitnami DreamFactory, и он также устанавливает другую MongoDb, которая запускается при загрузке системы. Я запускал свой MongoDbService (который был запущен без каких-либо ошибок), но, потеряв много времени, заметил, что фактически подключаюсь к службе MongoDb в Битнами. Пожалуйста, посмотрите, нет ли на вашем сервере другого экземпляра mongoDB.
Удачи!
источник
Кроме того, обратите внимание, что если ваш клиент оболочки mongo не может правильно подключиться к
mongod
экземпляру, вы можете получить такие ошибки «Отказано в доступе».Убедитесь, что ваш клиент открывает соединение, проверив порт соединения, но также и то, что используемый вами порт
mongod
не используется. Вы можете установить другой порт, используя--port <port>
параметр как в оболочке, так и в процессе.источник
У меня была эта проблема, потому что имя хоста в моем MongoDB Compass указывало на admin вместо моего проекта. Исправлено путем добавления / имя проекта после имени хоста :) Попробуйте это:
Используйте ту же строку подключения в вашем коде:
Удачи.
источник
источник
Согласился с тем, что вам необходимо пройти аутентификацию на уровне администратора базы данных, и ему нужна как минимум роль с правильными привилегиями, которые позволят избежать «исключения локального хоста» из БД (это для локального хостинга mongoDB), хотя у вас все есть на месте и до сих пор получение неавторизованных исключений почти для каждой команды при доступе к mongoDB, который был создан с использованием Mongo Atlas , тогда вы можете узнать причину, почему:
/dba/219003/not-authorized-on-admin-to-execute-command-mongodb-atlas-m0-free-tier-cluster?newreg=471a9a26108243d78d4ca74a87e7a115
а также проверьте это, если вы размещали mongoDB на mongo Atlas :
https://docs.atlas.mongodb.com/unsupported-commands/
источник
источник
Я следовал за этими шагами на Centos 7 для MongoDB 4.2. (Удаленный пользователь)
Обновить файл mongod.conf
Запустить сервис MongoDB демон
Открыть оболочку MongoDB
Выполнить эту команду на оболочке
Удаленный пользователь root создан. Теперь вы можете проверить это соединение с базой данных, используя любой инструмент MongoDB GUI с вашего компьютера разработчика. Лайк Робо 3Т
источник
Это может быть потому, что вы не установили noAuth = true в mongodb.conf
После настройки перезапустите сервис, используя
перезапуск службы mongod
источник