我想为我的MongoDB实例设置用户名和密码身份验证,以便任何远程访问都将要求提供用户名和密码。我尝试了MongoDB站点的教程,并做了以下工作:

use admin
db.addUser('theadmin', '12345');
db.auth('theadmin','12345');

在那之后,我退出了,再次跑了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

用户名和密码将以同样的方式工作在mongodb和mongoexport。


当前回答

我已经在6.0版中做到了这一点 如何设置数据库的用户名和密码;

安装MongoDB 6.0或更高版本 使用compass在MongoDB中创建数据库(不管名字是什么)

安装MongoDB Shell https://www.mongodb.com/try/download/shell

打开cmd

cd C:\Program Files\mongosh

mongosh“mongodb: / / localhost: 27017”

使用#您的数据库名称#

db。createUser({user: "xxx", pwd: "xxx", roles: [{role: "readWrite", db: "xxx"}]})

其他回答

按顺序执行以下步骤

该任务指导管理员通过CLI创建用户

use admin
db.createUser(
  {
    user: "admin",
    pwd: "admin123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
  }
)

启用身份验证,你怎么做取决于你的操作系统,如果你使用的是windows,你可以简单地mongod——auth,如果是linux,你可以编辑/etc/mongod.conf文件来增加安全性。授权:启用后重新启动服务 通过cli mongo连接-u "admin" -p "admin123"——authenticationDatabase "admin"就是这样

你可以查看这篇文章了解更多细节,并学习使用猫鼬连接它。

为特定数据库创建用户和密码以确保数据库访问安全:

use dbName

db.createUser(
   {
     user: "dbUser",
     pwd: "dbPassword",
     roles: [ "readWrite", "dbAdmin" ]
   }
)

哇,这么多复杂/令人困惑的答案。

这是从v3.4开始的。

简短的回答。

Start MongoDB without access control (/data/db or where your db is). mongod --dbpath /data/db Connect to the instance. mongo Create the user. use some_db db.createUser( { user: "myNormalUser", pwd: "xyz123", roles: [ { role: "readWrite", db: "some_db" }, { role: "read", db: "some_other_db" } ] } ) Stop the MongoDB instance and start it again with access control. mongod --auth --dbpath /data/db Connect and authenticate as the user. 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/

如果你想了解更多关于这些角色的信息,请访问:https://docs.mongodb.com/manual/reference/built-in-roles/

启动没有访问控制的MongoDB。 Mongod——dbpath /data/db 连接到实例。 蒙戈 创建administrator用户。下面将在admin身份验证数据库中创建一个administrator用户。该用户是some_db数据库上的dbOwner,而不是admin数据库上的dbOwner,记住这一点很重要。 使用管理 db.createUser ( { 用户:“myDbOwner”, pwd:“abc123”, 角色:[{role: "dbOwner", db: "some_db"}] } )

或者如果你想创建一个数据库管理员:

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

停止MongoDB实例并使用访问控制重新启动它。 Mongod——auth——dbpath /data/db 作为管理员用户连接并验证admin身份验证数据库,而不是some_db身份验证数据库。管理员用户是在admin认证数据库中创建的,some_db认证数据库中不存在该用户。 使用管理 db。身份验证(“myDbOwner”、“abc123”)

您现在通过some_db数据库验证为dbOwner。所以现在如果你想读/写/做东西直接对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.

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

如果您希望创建其他用户,这些用户不是用户管理员,只是普通用户,请继续阅读下面的内容。

创建普通用户。该用户将在下面的some_db身份验证数据库中创建。 使用some_db db.createUser ( { 用户:“myNormalUser”, pwd:“xyz123”, 角色:[{role: "readWrite", db: "some_db"}, {role: "read", db: "some_other_db"}] } ) 退出mongo shell,重新连接,作为用户进行身份验证。 使用some_db db。身份验证(“myNormalUser”、“xyz123”) db.foo.insert ({x: 1}) 使用some_other_db db.foo.find ({})

最后但并非最不重要的是由于用户没有正确阅读我发布的关于——auth标志的命令,如果您不希望将其设置为标志,您可以在mongoDB的配置文件中设置此值。

一些答案是在使用——auth命令行标志或设置配置文件属性之间发送混合信号。

security:
  authorization: enabled

我愿澄清这方面的问题。首先,在这两种情况下,身份验证凭证(即用户/密码)都必须通过执行db来创建。默认admin数据库上的createUser查询。一旦获得凭据,有两种方式来启用身份验证:

没有自定义配置文件:这是适用于前一个身份验证标志。启动mongod: usr/bin/mongod——auth 使用自定义配置文件:这是指后一种配置必须出现在自定义配置文件中。启动mongod: usr/bin/mongod——config <配置文件路径>

通过认证连接到mongo shell: mongodb -u <user> -p <password>——authenticationDatabase admin

——authenticationDatabase这里是创建用户的数据库名称。所有其他mongo命令,如mongorestore, mongodump接受额外的选项即-u <user> -p <password>——authenticationDatabase admin

详情请参阅https://docs.mongodb.com/manual/tutorial/enable-authentication/。

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

编辑mongo设置文件;

sudo nano /etc/mongod.conf

加一行:

security.authorization : enabled

重新启动服务

sudo service mongod restart

问候