MongoDB 用户认证及操作

本文最后更新于:2021年6月21日 晚上

如果还没有安装 MongoDB 可以参考:Windows 下 MongoDB 便携版安装与初始化

启动 mongodmongo shell 服务

# 启动 mongodb 服务
mongod --port 27017 --dbpath "D:\Program\mongodb-win32-x86_64-2008plus-ssl-4.0.1\mongodb_data\data" --logpath "D:\Program\mongodb-win32-x86_64-2008plus-ssl-4.0.1\mongodb_data\log\mongodb.log"

# 启动 mongo shell
mongo --port 27017

注:mongodb 的默认 port 就是 27017,所以也可以省略不写

创建管理员用户

# 切换到 admin 数据库
use admin;
# 创建用户 root, 密码是 root 的 admin 账号了
db.createUser(
  {
    user: "root",
    pwd: "root",
    roles: [
      {role: "root", db: "admin"}
    ]
  }
)

验证用户登录

  1. 重启一下 mongod 服务
# 这里的 --auth 选项就代表着启用身份认证
mongod --auth --port 27017 --dbpath "D:\Program\mongodb-win32-x86_64-2008plus-ssl-4.0.1\mongodb_data\data" --logpath "D:\Program\mongodb-win32-x86_64-2008plus-ssl-4.0.1\mongodb_data\log\mongodb.log"
  1. 测试 root 用户是否能正常登录
  • 使用用户名/密码认证连接 mongodb
    # 这里添加了 --authenticationDatabase 设置认证的数据库
    mongo --port 27017 -u "root" -p "root" --authenticationDatabase "admin"
  • 连接到 mongo 客户端后验证
    mongo --port 27017
    use admin;
    db.auth("root", "root");

创建普通用户

# 切换到 test 数据库
use test;
# 创建用户 test, 密码是 test 的普通账号了
# 主要变化在于 role,修改为对数据库 [test] 拥有 [可读写] 权限
db.createUser(
  {
    user: "test",
    pwd: "test",
    roles: [
      { role: "readWrite", db: "yapi" }
    ]
  }
)

使用 test 这个普通用户在登陆后能看到的也只有自己的数据库呢(如果数据库存在的话)

内建权限

下面是一些常用的权限

  • Read:允许用户读取指定数据库
  • readWrite:允许用户读写指定数据库
  • dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问 system.profile
  • userAdmin:允许用户向 system.users 集合写入,可以找指定数据库里创建、删除和管理用户
  • clusterAdmin:只在 admin 数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
  • readAnyDatabase:只在 admin 数据库中可用,赋予用户所有数据库的读权限
  • readWriteAnyDatabase:只在 admin 数据库中可用,赋予用户所有数据库的读写权限
  • userAdminAnyDatabase:只在 admin 数据库中可用,赋予用户所有数据库的 userAdmin 权限
  • dbAdminAnyDatabase:只在 admin 数据库中可用,赋予用户所有数据库的 dbAdmin 权限。
  • root:只在 admin 数据库中可用。超级账号,超级权限

使用 url 访问

# 不使用用户认证
mongodb://ip:port/db
# 使用用户认证
mongodb://username:[email protected]:port/db

查看用户

  • 查看全局的所有账号

    use admin;
    db.system.users.find().pretty()
  • 查看当前库下的用户

    use admin;
    show users;

修改权限

  • 追加

    # 给用户 test 追加新的权限
    db.grantRolesToUser(
      "test",
      [{role:"readWrite", db:"test"}]
    )
  • 替换

    # 替换用户 test 的权限
    db.updateUser(
      "test",
      {
        roles: [
          {role:"read", db:"test"}
        ]
      }
    )

删除用户

删除掉名为 test 的用户

db.dropUser('test')

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!