我想为我的MongoDB实例设置用户名和密码身份验证,以便任何远程访问都会要求输入用户名和密码 . 我尝试了MongoDB网站上的教程并做了以下事情:
use admin
db.addUser('theadmin', '12345');
db.auth('theadmin','12345');
在那之后,我退出并再次运行mongo . 我不需要密码来访问它 . 即使我远程连接到数据库,也不会提示我输入用户名和密码 .
UPDATE 这是我最终使用的解决方案
1) At the mongo command line, set the administrator:
use admin;
db.addUser('admin','123456');
2) Shutdown the server and exit
db.shutdownServer();
exit
3) Restart mongod with --auth
$ sudo ./mongodb/bin/mongod --auth --dbpath /mnt/db/
4) Run mongo again in 2 ways:
i) run mongo first then login:
$ ./mongodb/bin/mongo localhost:27017
use admin
db.auth('admin','123456');
ii) run & login to mongo in command line.
$ ./mongodb/bin/mongo localhost:27017/admin -u admin -p 123456
用户名和密码对 mongodump
和 mongoexport
的工作方式相同 .
12 回答
首先,在您的mongod配置文件(默认路径
/etc/mongo.conf
)中取消注释以#auth=true
开头的行 . 这将启用mongodb的身份验证 .然后,重启mongodb:
sudo service mongod restart
https://docs.mongodb.com/manual/reference/configuration-options/#security.authorization
编辑mongo设置文件;
添加行:
重启服务
问候
设置用户后,需要使用
--auth
选项启动mongod
.来自MongoDB网站:
MongoDB Authentication
User creation with password for a specific database to secure database access :
这个答案是针对Mongo 3.2.1 Reference
Terminal 1:
Terminal 2:
如果你想添加没有角色(可选):
检查是否经过身份验证:
它应该给你:
否则:
这些步骤对我有用:
在cmd上写mongod --port 27017
然后连接到mongo shell:mongo --port 27017
创建用户admin:使用admin db.createUser({user:"myUserAdmin",pwd:"abc123",roles:[{role:"userAdminAnyDatabase",db:"admin"}]})
断开mongo shell
重启mongodb:mongod --auth --port 27017
start mongo shell:mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"
要在连接后进行身份验证,请将mongo shell连接到mongod:mongo --port 27017
切换到认证数据库:使用admin db.auth("myUserAdmin","abc123"
首先使用终端在终端上运行mongoDB
现在运行mongo shell使用以下命令
使用访问控制重新启动MongoDB实例 .
现在使用命令行对自己进行身份验证
我是从中读到的
https://docs.mongodb.com/manual/tutorial/enable-authentication/
您需要切换到您希望用户使用的数据库(而不是admin db)...
use mydatabase
请参阅此帖子以获取更多帮助...... https://web.archive.org/web/20140316031938/http://learnmongo.com/posts/quick-tip-mongodb-users/
连接到mongoDB的最佳实践如下:
use admin
db.createUser( { user: "YourUserName", pwd: "YourPassword", roles: [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "clusterAdmin", db: "admin" } ] })
以下脚本将为DB创建admin用户 .
mongo -u YourUserName -p YourPassword admin
这允许您为在MongoDB中创建的不同集合创建不同的用户和密码
在您创建新用户后,请不要忘记对用户的
grant
read/write/root
权限 . 你可以尝试一下cmd: db.grantRolesToUser('yourNewUsername',[{ role: "root", db: "admin" }])
Wow so many complicated/confusing answers here.
这是 v3.4 的结尾 .
简答 .
1)启动没有访问控制的MongoDB .
2)连接到实例 .
3)创建用户 .
4)停止MongoDB实例并使用访问控制再次启动它 .
5)以用户身份连接和验证 .
完整答案:如果您想正确理解,请阅读此内容 .
它's really simple. I' ll愚蠢的下面https://docs.mongodb.com/manual/tutorial/enable-authentication/
如果您想了解更多关于角色的实际内容,请在此处阅读更多内容:https://docs.mongodb.com/manual/reference/built-in-roles/
1)启动没有访问控制的MongoDB .
2)连接到实例 .
3)创建用户管理员 . 以下内容在
admin
身份验证数据库中创建用户管理员 . 用户是some_db
数据库上的dbOwner
而不是admin
数据库,这一点很重要 .或者,如果您要创建一个管理员,该管理员是任何数据库的管理员:
4)停止MongoDB实例并使用访问控制再次启动它 .
5)以
admin
认证数据库的用户管理员身份进行连接和身份验证,而不是向some_db
身份验证数据库进行身份验证 . 用户管理员是在admin
身份验证数据库中创建的,该用户不存在于some_db
身份验证数据库中 .您现在通过
some_db
数据库身份验证为dbOwner
. 所以,现在如果您希望直接读取/写入/执行some_db
数据库,您可以更改它 .更多关于角色:https://docs.mongodb.com/manual/reference/built-in-roles/
如果您希望使其他用户不是用户管理员而且只是普通用户,请继续阅读下面的内容 .
6)创建普通用户 . 此用户将在下面的
some_db
身份验证数据库中创建 .7)退出mongo shell,重新连接,以用户身份进行身份验证 .
这是一个添加用户的JavaScript代码 .
用
--auth = true
开始mongod
从mongo shell访问admin数据库并传递javascript文件 .
mongo admin“Filename.js”
“Filename.js”