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


101

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

用户名和密码是什么?这样保存是否安全?

Answers:


206

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

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

您可以使用以下过程或参考MongoDB文档中的“启用身份验证”。

程序

  1. 在没有访问控制的情况下启动MongoDB。

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

    mongo --port 27017
    
  3. 创建用户管理员。

    use admin
    db.createUser(
      {
        user: "myUserAdmin",
        pwd: "abc123",
        roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
      }
    )
    
  4. 使用访问控制重新启动MongoDB实例。

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

    mongo --port 27017 -u "myUserAdmin" -p "abc123" \
      --authenticationDatabase "admin"
    

17
如果使用角色userAdminAnyDatabase创建用户,则将无法创建任何数据库。因此,角色部分应为:角色:[{角色:“ root”,数据库:“ admin”}]
georgeos


1
如果要查找dbpath,请使用:grep dbPath /etc/mongod.conf
rckd

13

除了已经提到的@Camilo Silva,如果您想免费创建数据库,读取,写入数据库等,但又不想创建根角色,则可以使用以下命令更改第3步:

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


1

除了先前提供的答案外,如果您的数据库已经使用访问控制启动(--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例外,在启用访问控制后,连接到localhost接口并在管理数据库中创建第一个用户。第一个用户必须具有创建其他用户的特权,例如具有userAdmin或userAdminAnyDatabase角色的用户。使用localhost异常的连接只能访问在admin数据库上创建第一个用户的权限。

这是文档那部分的链接。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.