MongoDB 创建用户的方法

90

创建超级管理员用户

  1. 将配置文件 mongodb.conf 的 auth 项设置为 false ,或者在启动时不添加 auth 参数,此时在 mongo shell 可不用验证进行读写操作
# 认证模式
auth=true
  1. 使用 mongo 命令进入 mongo shell ,在 admin 库创建 root 角色用户
user admin
db.createUser({user:'root',pwd:'ea123456', roles:[{role:'root', db:'admin'}]})  // db:'admin' 可省略
  1. 将配置文件 mongodb.conf 的 auth 项设置为 true ,或者在启动时添加 auth 参数,进入 mongo shell,需要在 admin 库下验证才能进行读写操作
use admin
db.auth("ea", "ea123456")
show dbs
  1. 使用 show users 命令可以查看创建的用户
show users

创建普通用户读写单独库

  1. 开启认证后,必须使用有操作 admin 库权限的用户登录认证后才能添加用户。因为用户信息保存在 admin 库的集合 system.users 中
use admin
db.auth("ea", "ea123456")
  1. 切换到需要该用户读写的库,再创建用户。
use article
db.createUser({user:'user1',pwd:'ea123456', roles:[{role:'readWrite', db:'article'}]})
  • 注意:若不切换到 article 而直接在 admin 库创建用户,则后期连接需要 use admin 来认证用户,在 Spring Boot 中使用 MongoDB 连接串种需要加上参数 authSource
spring:
  data:
    mongodb:
      uri: mongodb://user1:ea123456@ip:27017/article?authSource=admin

查看当前库下所有用户

use article
show users

修改密码

use article
db.changeUserPassword("user1", "123456")

删除用户

use article
db.dropUser("user1")

SpringBoot 连接 MongoDB

  1. pom.xml 添加依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
  1. 新增配置
spring:
  data:
    mongodb:
      uri: mongodb://用户名:密码@服务器IP:端口/数据库名
      # 上方为明确指定某个数据的用户进行连接
      # 也可以使用admin 数据库中的用户进行连接  统一到admin 数据库进行认证
      # admin 用户认证 url 写法: mongodb://账户:密码@ip:端口/数据库名?authSource=admin&authMechanism=SCRAM-SHA-1
  1. 使用 MongoTemplate 操作

MongoDB 内置角色

  • Read :允许用户读取指定数据库
  • readWrite:允许用户读写指定数据库
  • backup,retore :在进行备份、恢复时可以单独指定的角色,在db.createUser()方法中roles里面的db必须写成是admin库,要不然会报错
  • dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
  • userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
  • clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
  • readAnyDatabase :只在admin数据库中可用,赋予用户所有数据库的读权限
  • readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
  • userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限,
  • dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
  • root:只在admin数据库中可用。超级账号,超级权限

参考

  1. https://blog.csdn.net/weixin_44799217/article/details/127940726
  2. https://blog.csdn.net/weixin_44834554/article/details/126768329