MongoDB默认的用户名和密码是什么?

171

我在本地和生产环境上使用相同的连接字符串。 当连接字符串为mongodb://localhost/mydb

用户名和密码是什么? 这样做安全吗?

6个回答

327

默认情况下,MongoDB没有启用访问控制,因此没有默认的用户名或密码。

要启用访问控制,请使用命令行选项--auth或security.authorization配置文件设置之一。

您可以使用以下过程或参考MongoDB文档中的Enabling Auth

过程

  1. 未启用访问控制的情况下启动MongoDB。

 mongod --port 27017 --dbpath /data/db1
  • 连接到实例。

     mongosh --port 27017
    
  • 创建用户管理员。

  •  use admin
     db.createUser(
       {
         user: "myUserAdmin",
         pwd: passwordPrompt(), // or cleartext password
         roles: [ 
           { role: "userAdminAnyDatabase", db: "admin" },
           { role: "readWriteAnyDatabase", db: "admin" } 
         ]
       }
     )
    
  • 重新启动启用访问控制的MongoDB实例。

     mongod --auth --port 27017 --dbpath /data/db1
    
  • 以用户管理员身份进行身份验证。

     mongosh --port 27017 --authenticationDatabase "admin"\
         -u "myUserAdmin" -p 
    

  • 33
    如果使用userAdminAnyDatabase角色创建用户,则将无法创建任何数据库。因此,roles部分应为:roles: [ { role: "root", db: "admin" } ]。 - georgeos
    6
    请链接MongoDB手册中有关启用认证的原始文章:https://docs.mongodb.com/manual/tutorial/enable-authentication/ - ntcho
    1
    如果您想找到dbpath,请使用以下命令:grep dbPath /etc/mongod.conf - rcd
    @georgeos 我已经尝试过了,没问题,可以轻松创建数据库。正如natcho所提到的,这是MongoDB手册中提出的相同方法。 - Bheid
    如果需要按照@georgeos所述删除用户并创建具有不同角色的新用户,请使用db.dropUser("myUserAdmin") - ViFI
    1
    最近版本的Mongo使用mongosh作为命令,而不是mongo,例如:mongosh --port 27017 - FullStackFool

    28

    除了@Camilo Silva已经提到的内容,如果你想免费访问创建数据库、读取、写入数据库等功能,但不想创建根角色,可以按照以下方式更改第三步骤:

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

    如果您已经创建了用户,可以按以下方式更新用户:
    首先登录:
    mongo --port 27017 -u "myUserAdmin" -p "abc123" \
      --authenticationDatabase "admin"
    

    添加权限:

    use admin
    db.grantRolesToUser(
       "myUserAdmin",
       [ { role: "userAdminAnyDatabase", db: "admin" }, 
         { role: "dbAdminAnyDatabase", db: "admin" }, 
         { role: "readWriteAnyDatabase", db: "admin" } ]
    )
    

    创建副本集并管理集群,需要添加“clusterAdmin”角色。 - danilo
    因为使用了“--authenticationDatabase”参数,我点赞了。这个方法对我很有用。 - Rui F Ribeiro

    5

    除了先前提供的答案外,还有一种选项是遵循“本地主机异常”方法,如果您的数据库已经启动了访问控制(--auth开关),则可以使用该方法创建第一个用户。为了实现这一点,您需要拥有对服务器的本地主机访问权限,然后运行:

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

    根据MongoDB文档所述:
    本地主机例外允许您启用访问控制,然后在系统中创建第一个用户。使用本地主机例外,在启用访问控制后,连接到localhost接口并在admin数据库中创建第一个用户。第一个用户必须拥有创建其他用户的权限,比如具有userAdmin或userAdminAnyDatabase角色的用户。只有使用本地主机例外连接才能访问在admin数据库上创建第一个用户。这个章节是相关文档的链接。

    5

    对于MongoDB 2.6之前的版本,添加根用户的命令是addUser(例如)

    db.addUser({user:'admin',pwd:'<password>',roles:["root"]})
    

    1
    从2.6版本开始,您可以使用db.CreateUser创建用户。在当前的3.4.x版本中也是如此。之前的版本中您需要使用db.addUser来添加用户。 - Razvan Dumitru
    创建用户。 - cactuschibre

    1

    前往您的实例中的Mongo

        mongo
    
        use admin
    
        db.createUser({user:"Username", pwd:"Password", roles:[{role:"root", db:"admin"}]})
    

    目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community

    0
    mongod --bind_ip_all --auth
    

    在修改.conf文件后使用此命令:

     network interfaces
    net:
      port: 27017
      bindIp: 127.0.0.1,mongodb_server_ip
    

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接