MongoDB:用户管理

MongoDB的默认认证设置

  1. 未开启认证时:默认情况下,MongoDB安装完成后可能未开启认证功能,此时连接MongoDB不需要密码。这种情况下,MongoDB允许本地连接,并且不需要使用任何账号密码即可直接连接数据库。
  2. 开启认证后:如果MongoDB配置了认证功能,那么连接数据库时就需要提供正确的用户名和密码。MongoDB提供了多种认证机制,包括基于用户名和密码的身份验证、基于X.509证书的身份验证等。

设置用户和密码

开启MongoDB的密码连接,即启用MongoDB的访问认证功能,以确保只有拥有正确用户名和密码的用户才能连接到数据库。以下是开启MongoDB密码连接的详细步骤,基于MongoDB的通用配置方法:

1. 创建用户

在启用认证之前,需要先为MongoDB创建用户。MongoDB的用户是与数据库相关联的,因此需要为相应的数据库创建用户。

  • 创建超级管理员用户:通常,会先为admin数据库创建一个超级管理员用户,该用户将拥有管理所有数据库的权限。

    1
    2
    3
    4
    5
    6
    
    use admin  
    db.createUser({  
      user: "adminUser",  
      pwd: "adminPass",  
      roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]  
    })

    这里,adminUser是用户名,adminPass是密码,userAdminAnyDatabase是一个角色,允许用户管理任何数据库的用户。

  • 创建普通用户:为特定的数据库创建普通用户,这些用户将只有对指定数据库的访问权限。

    1
    2
    3
    4
    5
    6
    
    use myDatabase  
    db.createUser({  
      user: "myUser",  
      pwd: "myPass",  
      roles: [ { role: "readWrite", db: "myDatabase" } ]  
    })

    这里,myDatabase是数据库名,myUser是用户名,myPass是密码,readWrite是一个角色,允许用户在该数据库上进行读写操作。

2. 修改配置文件

接下来,需要修改MongoDB的配置文件(通常是mongod.confmongodb.conf),以启用认证。

  • 找到配置文件中的security部分。

  • authorization选项设置为enabled

    1
    2
    
    security:  
      authorization: enabled

    注意:配置文件的格式可能因MongoDB的版本和安装方式而异,上述YAML格式仅作为示例。

3. 重启MongoDB服务

修改配置文件后,需要重启MongoDB服务以使更改生效。

  • 在Windows上,可以通过服务管理器或命令提示符来重启MongoDB服务。
  • 在Linux上,可以使用systemctl(对于使用systemd的系统)或service命令来重启MongoDB服务。

4. 验证配置

重启MongoDB服务后,尝试使用创建的用户名和密码连接到MongoDB数据库,以验证认证功能是否已正确启用。

  • 使用MongoDB命令行工具或客户端连接到数据库。

  • 切换到相应的数据库。

  • 使用db.auth()函数验证用户名和密码。

    1
    
    mongo -u adminUser -p --authenticationDatabase admin

    在命令行中输入上述命令后,系统会提示输入密码。输入正确的密码后,如果认证成功,你将能够执行数据库操作。

通过以上步骤,你可以成功开启MongoDB的密码连接,确保只有经过授权的用户才能访问数据库。

角色

MongoDB中的角色是一种权限管理机制,用于控制用户对数据库的访问权限。MongoDB中的角色分为内置角色和自定义角色两种。以下是MongoDB中常见的内置角色:

一、数据库用户角色

  1. read:具有读取数据库的权限,但不能进行写操作。只能读取所有非系统集合和system.js集合的数据。
  2. readWrite:具有读写权限,可以读取和修改数据库和集合中的数据。

二、数据库管理角色

  1. dbAdmin:具有数据库管理权限,可以管理数据库,包括创建和删除数据库,创建、删除和重命名集合,创建索引等。
  2. dbOwner:具有数据库所有者权限,拥有数据库的所有权限,等同于同时具有dbAdminuserAdmin角色。
  3. userAdmin:具有用户管理权限,可以创建和修改用户,分配和撤销用户的角色。

三、集群管理角色

  1. clusterAdmin:具有集群管理权限,可以管理整个集群,包括添加和删除节点,切换主节点等。这是最高级别的集群管理角色,相当于同时拥有clusterManagerclusterMonitorhostManager三个角色的权限。
  2. clusterManager:具有集群管理权限,但与clusterAdmin相比,权限略低,不能执行某些高级操作,如添加和删除节点。
  3. clusterMonitor:具有监控集群的权限,可以查看集群的运行状态、性能指标等信息。
  4. hostManager:在较新版本的MongoDB中可能不再直接作为内置角色出现,但在一些上下文中,它可能代表与主机管理相关的权限集合。具体取决于MongoDB的版本和配置。

四、备份恢复角色

  1. backup:具有备份数据库的权限。
  2. restore:具有恢复数据库的权限。

五、所有数据库角色

  1. readAnyDatabase:具有读取任何数据库的权限。
  2. readWriteAnyDatabase:具有读写任何数据库的权限。
  3. userAdminAnyDatabase:具有在任何数据库中管理用户的权限,但通常没有读写数据的权限。
  4. dbAdminAnyDatabase:具有在任何数据库中执行数据库管理操作的权限,如创建和删除集合等。

六、超级用户角色

  1. root:具有所有权限的超级用户角色,可以执行任何操作,包括管理用户、数据库和集群等。

七、自定义角色

除了上述内置角色外,MongoDB还支持创建自定义角色以满足特定的权限控制需求。自定义角色可以根据具体的业务逻辑和权限需求来定义,可以设置不同的权限和操作,从而实现更细粒度的权限控制。

注意事项

  1. MongoDB默认是没有开启用户认证的,也就是说在默认情况下,任何人都可以连接数据库并拥有超级管理员的权限。为了增强安全性,建议启用用户认证并分配适当的角色给用户。
  2. 在分配角色时,需要谨慎考虑用户的权限范围,避免过度授权导致安全风险。
  3. MongoDB中的角色可以定义在数据库级别或集合级别,并且可以通过用户将角色分配给其他用户来实现权限控制。
0%