如何用用户名和密码保护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 

用户名和密码对于mongodumpmongoexport工作方式是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代码来添加用户。

  1. --auth = true开始mongod

  2. 从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 "); 
  3. 现在用户添加完成,我们可以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理员是在adminauthentication数据库中创build的,用户在some_dbauthentication数据库中不存在。

 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_dbauthentication数据库中创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" }])