我想为我的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。


当前回答

很多重复的答案,但我认为他们忽略了一个重要的注意:

即使正确启用了身份验证,您也可以在没有用户名/密码的情况下连接到Mongo数据库!

但是,您只能执行无害的命令,如db.help()、db.getMongo()、db.listCommands()等。

$ mongo 
MongoDB shell version v4.4.3
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("f662858b-8658-4e33-a735-120e3639c131") }
MongoDB server version: 4.4.3
mongos> db.getMongo()
connection to 127.0.0.1:27017
mongos> db
test
mongos> db.version()
4.4.3
mongos> db.runCommand({connectionStatus : 1})
{
        "authInfo" : {
                "authenticatedUsers" : [ ],
                "authenticatedUserRoles" : [ ]
        },
        "ok" : 1,
        "operationTime" : Timestamp(1618996970, 2),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1618996970, 2),
                "signature" : {
                        "hash" : BinData(0,"Kre9jvnJvsW+OVCl1QC+eKSBbbY="),
                        "keyId" : NumberLong("6944343118355365892")
                }
        }
}

其他回答

创建新用户后,请不要忘记授予该用户读/写/root权限。你可以试试

cmd: db。grantRolesToUser('yourNewUsername',[{role: "root", db: "admin"}])

您需要切换到您希望用户使用的数据库(而不是admin db)…

使用mydatabase

查看这篇文章以获得更多帮助…https://web.archive.org/web/20140316031938/http://learnmongo.com/posts/quick-tip-mongodb-users/

连接mongoDB的最佳实践如下:

初始安装完成后, 使用管理 然后执行以下脚本创建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用户。

登录到db。管理使用 mongo -u YourUserName -p YourPassword admin 登录后,重复1 ~ 3可创建N个具有相同或不同管理凭证的数据库。

这允许您为在MongoDB中创建的不同集合创建不同的用户和密码

你可以修改/etc/mongod.conf。

之前

#安全:

security:
    authorization: "enabled"

然后重启sudo service mongod

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

use dbName

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