MongoDB 用户认证及操作

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

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

启动 mongodmongo shell 服务

1
2
3
4
5
# 启动 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,所以也可以省略不写

创建管理员用户

1
2
3
4
5
6
7
8
9
10
11
12
# 切换到 admin 数据库
use admin;
# 创建用户 root, 密码是 root 的 admin 账号了
db.createUser(
{
user: "root",
pwd: "root",
roles: [
{role: "root", db: "admin"}
]
}
)

验证用户登录

  1. 重启一下 mongod 服务
1
2
# 这里的 --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
    1
    2
    # 这里添加了 --authenticationDatabase 设置认证的数据库
    mongo --port 27017 -u "root" -p "root" --authenticationDatabase "admin"
  • 连接到 mongo 客户端后验证
    1
    2
    3
    mongo --port 27017
    use admin;
    db.auth("root", "root");

创建普通用户

1
2
3
4
5
6
7
8
9
10
11
12
13
# 切换到 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 访问

1
2
3
4
# 不使用用户认证
mongodb://ip:port/db
# 使用用户认证
mongodb://username:password@ip:port/db

查看用户

  • 查看全局的所有账号

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

    1
    2
    use admin;
    show users;

修改权限

  • 追加

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # 替换用户 test 的权限
    db.updateUser(
    "test",
    {
    roles: [
    {role:"read", db:"test"}
    ]
    }
    )

删除用户

删除掉名为 test 的用户

1
db.dropUser('test')

MongoDB 用户认证及操作
https://blog.rxliuli.com/p/ff25d82d183d44b2b014514c56c986d1/
作者
rxliuli
发布于
2020年4月18日
许可协议