如何用用户名和密码保护MongoDB
我想为我的MongoDB实例设置用户名和密码authentication,以便任何远程访问都会询问用户名和密码。 我尝试从MongoDB网站的教程,并做了如下:
use admin db.addUser('theadmin', '12345'); db.auth('theadmin','12345');
在那之后,我再次离开并且跑了mongo。 我不需要密码来访问它。 即使我远程连接到数据库,我也不会提示input用户名和密码。
更新这里是我最终使用的解决scheme
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
工作方式是mongodump
。
您需要在设置用户后使用--auth
选项启动mongod
。
从MongoDB网站:
使用
--auth
选项运行数据库(mongod进程)以启用安全性。 在使用--auth
启动服务器之前,您必须先将用户添加到pipe理数据库中,或者从localhost接口添加第一个用户。
MongoDB身份validation
首先,在mongodconfiguration文件(默认path/etc/mongo.conf
)中取消注释以/etc/mongo.conf
#auth=true
开头的行。 这将启用mongodb的身份validation。
然后,重新启动mongodb: sudo service mongod restart
这个答案适用于Mongo 3.2.1 Reference
1号航站楼:
$ mongod --auth
2号航站楼:
db.createUser({user:"admin_name", pwd:"1234",roles:["readWrite","dbAdmin"]})
如果你想添加没有angular色(可选):
db.createUser({user:"admin_name", pwd:"1234", roles:[]})
检查是否authentication:
db.auth("admin_name", "1234")
它应该给你:
1
其他:
Error: Authentication failed. 0
这里是一个JavaScript代码来添加用户。
-
用
--auth = true
开始mongod
-
从mongo shell访问pipe理数据库并传递javascript文件。
mongo admin“Filename.js”
“Filename.js”
// Adding admin user db.addUser("admin_username", " admin_password"); // Authenticate admin user db.auth("admin_username ", " admin_password "); // use database code from java script db = db.getSiblingDB("newDatabase"); // Adding newDatabase database user db.addUser("database_username ", " database_ password ");
-
现在用户添加完成,我们可以validation从mongo shell访问数据库
哇这么多复杂/混乱的答案在这里。
这是v3.4版本 。
简短的回答。
1)启动没有访问控制的MongoDB。
mongod --dbpath /data/db
2)连接到实例。
mongo
3)创build用户。
use some_db db.createUser( { user: "myNormalUser", pwd: "xyz123", roles: [ { role: "readWrite", db: "some_db" }, { role: "read", db: "some_other_db" } ] } )
4)停止MongoDB实例,并通过访问控制重新启动它。
mongod --auth --dbpath /data/db
5)作为用户连接和authentication。
use some_db db.auth("myNormalUser", "xyz123") db.foo.insert({x:1}) use some_other_db db.foo.find({})
长答案:如果你想正确理解,请阅读。
这很简单。 我会愚蠢的下面https://docs.mongodb.com/manual/tutorial/enable-authentication/
如果您想了解更多关于实际angular色的信息,请阅读以下链接: https : //docs.mongodb.com/manual/reference/built-in-roles/
1)启动没有访问控制的MongoDB。
mongod --dbpath /data/db
2)连接到实例。
mongo
3)创build用户pipe理员。 以下内容将在admin
身份validation数据库中创build一个用户pipe理员 用户是通过some_db
数据库的some_db
而不是通过admin
数据库,这一点很重要。
use admin db.createUser( { user: "myDbOwner", pwd: "abc123", roles: [ { role: "dbOwner", db: "some_db" } ] } )
或者,如果你想创build一个pipe理员是任何数据库pipe理员:
use admin db.createUser( { user: "myUserAdmin", pwd: "abc123", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } )
4)停止MongoDB实例,并通过访问控制重新启动它。
mongod --auth --dbpath /data/db
5)作为用户pipe理员连接并通过admin
身份validation数据库进行身份validation,而不是针对some_db
身份validation数据库。 用户pipe理员是在admin
authentication数据库中创build的,用户在some_db
authentication数据库中不存在。
use admin db.auth("myDbOwner", "abc123")
您现在通过了some_db
数据库的some_db
身份validation。 所以现在如果你想读/写/直接对some_db
数据库做东西,你可以改变它。
use some_db //...do stuff like db.foo.insert({x:1}) // remember that the user administrator had dbOwner rights so the user may write/read, if you create a user with userAdmin they will not be able to read/write for example.
更多关于angular色的信息: https : //docs.mongodb.com/manual/reference/built-in-roles/
如果您希望增加不是用户pipe理员的用户,而只是普通用户,请继续阅读以下内容。
6)创build一个普通的用户。 这个用户将在下面的some_db
authentication数据库中创build。
use some_db db.createUser( { user: "myNormalUser", pwd: "xyz123", roles: [ { role: "readWrite", db: "some_db" }, { role: "read", db: "some_other_db" } ] } )
7)退出mongo shell,重新连接,以用户身份validation。
use some_db db.auth("myNormalUser", "xyz123") db.foo.insert({x:1}) use some_other_db db.foo.find({})
https://docs.mongodb.com/manual/reference/configuration-options/#security.authorization
编辑mongo设置文件;
sudo nano /etc/mongod.conf
添加行:
security.authorization : enabled
重新启动服务
sudo service mongod restart
问候
首先在terminal上运行mongoDB
mongod
现在运行mongo shell使用下面的命令
use admin db.createUser( { user: "myUserAdmin", pwd: "abc123", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } )
用访问控制重新启动MongoDB实例。
mongod --auth
现在使用命令行进行身份validation
mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"
我读了它
https://docs.mongodb.com/manual/tutorial/enable-authentication/
你需要切换到你想要的用户数据库(而不是pipe理数据库)…
use mydatabase
看到这个职位的更多帮助… http://learnmongo.com/posts/quick-tip-mongodb-users/
在创build新用户之后,请不要忘记grant
read/write/root
权限。 你可以试试
cmd: db.grantRolesToUser('yourNewUsername',[{ role: "root", db: "admin" }])
- 如何保护RESTful Web服务?
- 使用JWT在Asp.net Web API上实现身份validation
- 根据Active Directoryvalidation用户名和密码?
- 春季安全AuthenticationManager与AuthenticationProvider?
- 是否有可能使用ASP.NET MVC创build一个login系统,但不使用MembershipProvider?
- Spring Security 3使用Hibernate进行数据库validation
- 为什么在“隐式”stream程运行良好时,OAuth2中存在“授权码”stream?
- 为当前用户获取NetworkCredential(C#)
- 什么是最好的分布式蛮力对策?