如何使用用户名和密码保护MongoDB

mur*_*lai 356 authentication mongodb

我想为我的MongoDB实例设置用户名和密码验证,以便任何远程访问都会要求输入用户名和密码.我尝试了MongoDB网站上的教程并做了以下事情:

use admin
db.addUser('theadmin', '12345');
db.auth('theadmin','12345');
Run Code Online (Sandbox Code Playgroud)

在那之后,我退出并再次运行mongo.而且我不需要密码来访问它.即使我远程连接到数据库,也不会提示我输入用户名和密码.


更新这是我最终使用的解决方案

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
Run Code Online (Sandbox Code Playgroud)

用户名和密码将以相同的方式用于mongodumpmongoexport.

Ale*_*scu 108

您需要在设置用户后从mongod--auth选项开始.

来自MongoDB网站:

使用--auth启用安全性的选项运行数据库(mongod进程).您必须在启动服务器之前将用户添加到admin db --auth,或者从localhost接口添加第一个用户.

MongoDB身份验证


Kar*_*son 67

哇这里有很多复杂/混乱的答案.

这是v3.4的一部分.

简短的回答.

1)启动没有访问控制的MongoDB.

mongod --dbpath /data/db
Run Code Online (Sandbox Code Playgroud)

2)连接到实例.

mongo
Run Code Online (Sandbox Code Playgroud)

3)创建用户.

use some_db
db.createUser(
  {
    user: "myNormalUser",
    pwd: "xyz123",
    roles: [ { role: "readWrite", db: "some_db" },
             { role: "read", db: "some_other_db" } ]
  }
)
Run Code Online (Sandbox Code Playgroud)

4)停止MongoDB实例并使用访问控制再次启动它.

mongod --auth --dbpath /data/db
Run Code Online (Sandbox Code Playgroud)

5)以用户身份连接并进行身份验证.

use some_db
db.auth("myNormalUser", "xyz123")
db.foo.insert({x:1})
use some_other_db
db.foo.find({})
Run Code Online (Sandbox Code Playgroud)

答案很长:如果你想要正确理解,请阅读此内容.

这很简单.我将愚蠢的下面的https://docs.mongodb.com/manual/tutorial/enable-authentication/

如果您想了解更多关于角色的实际内容,请访问:https://docs.mongodb.com/manual/reference/built-in-roles/

1)启动没有访问控制的MongoDB.

mongod --dbpath /data/db
Run Code Online (Sandbox Code Playgroud)

2)连接到实例.

mongo
Run Code Online (Sandbox Code Playgroud)

3)创建用户管理员.以下内容在admin身份验证数据库中创建用户管理员.用户是dbOwnersome_db数据库和不通过admin数据库,这是很重要的记忆.

use admin
db.createUser(
  {
    user: "myDbOwner",
    pwd: "abc123",
    roles: [ { role: "dbOwner", db: "some_db" } ]
  }
)
Run Code Online (Sandbox Code Playgroud)

或者,如果您要创建一个管理员,管理员通过任何数据库:

use admin
db.createUser(
  {
    user: "myUserAdmin",
    pwd: "abc123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)
Run Code Online (Sandbox Code Playgroud)

4)停止MongoDB实例并使用访问控制再次启动它.

mongod --auth --dbpath /data/db
Run Code Online (Sandbox Code Playgroud)

5)以admin身份验证数据库的用户管理员身份进行身份验证,而不是some_db身份验证数据库.用户管理员是在admin身份验证数据库中创建的,用户在身份验证数据库中不存在some_db.

use admin
db.auth("myDbOwner", "abc123")
Run Code Online (Sandbox Code Playgroud)

您现在已dbOwner通过some_db数据库身份验证.所以,现在如果您希望直接读取/写入/执行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.
Run Code Online (Sandbox Code Playgroud)

更多关于角色:https://docs.mongodb.com/manual/reference/built-in-roles/

如果您希望使其他用户不是用户管理员而且只是普通用户,请继续阅读下面的内容.

6)创建普通用户.此用户将在some_db下面的身份验证数据库中创建.

use some_db
db.createUser(
  {
    user: "myNormalUser",
    pwd: "xyz123",
    roles: [ { role: "readWrite", db: "some_db" },
             { role: "read", db: "some_other_db" } ]
  }
)
Run Code Online (Sandbox Code Playgroud)

7)退出mongo shell,重新连接,以用户身份进行身份验证.

use some_db
db.auth("myNormalUser", "xyz123")
db.foo.insert({x:1})
use some_other_db
db.foo.find({})
Run Code Online (Sandbox Code Playgroud)

  • 我终于明白了到底发生了什么。 (2认同)
  • 我发现自己希望接受的答案可以在SO上得到更新.这是截至2017年7月最相关的解决方案. (2认同)

Shn*_*nkc 60

首先,取消注释#auth=truemongod配置文件中的行(默认路径/etc/mongo.conf).这将启用mongodb的身份验证.

然后,重启mongodb: sudo service mongod restart

  • 默认路径是`/ etc/mongod.conf`而不是`/ etc/mongo.conf` (10认同)
  • 或者,首先取消注释,然后重启:))) (2认同)
  • 更新:现在重启服务:sudo service mongodb restart (2认同)

小智 45

这个答案适用于Mongo 3.2.1 参考

1号航站楼:

$ mongod --auth
Run Code Online (Sandbox Code Playgroud)

2号航站楼:

db.createUser({user:"admin_name", pwd:"1234",roles:["readWrite","dbAdmin"]})
Run Code Online (Sandbox Code Playgroud)

如果你想添加没有角色(可选):

db.createUser({user:"admin_name", pwd:"1234", roles:[]})
Run Code Online (Sandbox Code Playgroud)

检查是否经过身份验证:

db.auth("admin_name", "1234")
Run Code Online (Sandbox Code Playgroud)

它应该给你:

1
Run Code Online (Sandbox Code Playgroud)

否则:

Error: Authentication failed.
0
Run Code Online (Sandbox Code Playgroud)

  • 旧版本(如2.4)将使用db.addUser (2认同)

小智 26

这是一个添加用户的JavaScript代码.

  1. 开始mongod使用--auth = true

  2. 从mongo shell访问管理数据库并传递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 ");
    
    Run Code Online (Sandbox Code Playgroud)
  3. 现在用户添加完成,我们可以验证从mongo shell访问数据库

  • 在文件中设置用户名和密码看起来不太安全。 (2认同)
  • @CamiloMartin JavaScript,而不是“Javascript”。 (2认同)

ali*_*ara 12

https://docs.mongodb.com/manual/reference/configuration-options/#security.authorization

编辑mongo设置文件;

sudo nano /etc/mongod.conf
Run Code Online (Sandbox Code Playgroud)

添加行:

security.authorization : enabled
Run Code Online (Sandbox Code Playgroud)

重启服务

sudo service mongod restart
Run Code Online (Sandbox Code Playgroud)

问候

  • 我不明白为什么每个人都不提这个。这太重要了 (6认同)

deu*_*ine 11

你可以改变/etc/mongod.conf

#security:

security:
    authorization: "enabled"
Run Code Online (Sandbox Code Playgroud)

然后 sudo service mongod restart


Jin*_*min 10

这是我在 Ubuntu 18.04 上所做的:

$ sudo apt install mongodb
$ mongo
> show dbs
> use admin
> db.createUser({  user: "root",  pwd: "rootpw",  roles: [ "root" ]  })  // root user can do anything
> use lefa
> db.lefa.save( {name:"test"} )
> db.lefa.find()
> show dbs
> db.createUser({  user: "lefa",  pwd: "lefapw",  roles: [ { role: "dbOwner", db: "lefa" } ]  }) // admin of a db
> exit
$ sudo vim /etc/mongodb.conf
auth = true
$ sudo systemctl restart mongodb
$ mongo -u "root" -p "rootpw" --authenticationDatabase  "admin"
> use admin
> exit
$ mongo -u "lefa" -p "lefapw" --authenticationDatabase  "lefa"
> use lefa
> exit
Run Code Online (Sandbox Code Playgroud)


小智 9

首先使用终端在终端上运行mongoDB

mongod
Run Code Online (Sandbox Code Playgroud)

现在运行mongo shell使用以下命令

    use admin
db.createUser(
  {
    user: "myUserAdmin",
    pwd: "abc123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)
Run Code Online (Sandbox Code Playgroud)

使用访问控制重新启动MongoDB实例.

mongod --auth
Run Code Online (Sandbox Code Playgroud)

现在使用命令行验证自己

mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"
Run Code Online (Sandbox Code Playgroud)

我是从中读到的

https://docs.mongodb.com/manual/tutorial/enable-authentication/


Kel*_*ang 6

mongodb 4.4.13 社区

1.创建数据库用户

use admin
db.createUser(
  {
    user: "myUserAdmin",
    pwd: "abc123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)
Run Code Online (Sandbox Code Playgroud)

1.2 验证工作

> db.auth('myUserAdmin','abc123')

< { ok: 1 }
Run Code Online (Sandbox Code Playgroud)

如果失败你会得到

> db.auth('myUserAdmin','amongus')

MongoServerError: Authentication failed.
Run Code Online (Sandbox Code Playgroud)

2.修改/etc/mongod.conf

nano /etc/mongod.conf
Run Code Online (Sandbox Code Playgroud)

改变:

#security:
Run Code Online (Sandbox Code Playgroud)

到:

security:
  authorization: enabled
Run Code Online (Sandbox Code Playgroud)

3.重启mongod服务

sudo service mongod restart
Run Code Online (Sandbox Code Playgroud)

这对我有用。


Has*_*mal 5

使用特定数据库的密码创建用户以保护数据库访问:

use dbName

db.createUser(
   {
     user: "dbUser",
     pwd: "dbPassword",
     roles: [ "readWrite", "dbAdmin" ]
   }
)
Run Code Online (Sandbox Code Playgroud)


小智 5

请按顺序执行以下步骤

  • 使用 CLI 创建用户
use admin
db.createUser(
  {
    user: "admin",
    pwd: "admin123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
  }
)
Run Code Online (Sandbox Code Playgroud)
  • 启用身份验证,您的操作方式因操作系统而异,如果您使用的是 windows,则可以简单地mongod --auth在 linux 的情况下,您可以编辑/etc/mongod.conf文件以添加security.authorization : enabled然后重新启动 mongd 服务
  • 通过 cli 连接mongo -u "admin" -p "admin123" --authenticationDatabase "admin"。就是这样

您可以查看这篇文章以了解更多详细信息并学习使用 mongoose 连接到它。