MongoDB 权限管理

前言

上一篇 《MongoDB 单机安装部署》 文章中,为 MongoDB 配置了授权功能,当时只介绍了创建一个高权限账户,没有详细介绍 MongoDB 的权限相关的内容,本篇文章将详细 MongoDB 的权限控制。

1. 权限控制

MongoDB 权限控制是基于角色划分的,角色是一部分权限的组合。在创建用户时,需要指定用户所属的角色,一个用户可拥有多种角色,每个角色又可以包含多种权限。MongoDB 提供了多种默认角色,当然也支持用户自定义角色。

1.1 MongoDB 默认角色

刚才提到 MongoDB 可以自定义角色,也为用户提供了部分默认角色。关于默认角色,不同的角色类型,它的作用范围也不一样,例如 readWrite 角色,它的作用范围就是一个特定的数据库。

1.1.1 读写角色

读写权限的作用域是特定的数据库,默认角色又 read 和 readWrite 两种:

  • read:表示用户针对数据库中所有非系统集合具有 “读” 操作权限。
  • readWrite:表示用户针对数据中所有非系统集合具有 “读/写” 操作权限。

授权案例,为 test 库创建一个 test_user 用户,具有只读权限。

use test;
db.createUser({
   user: "test_user", pwd: "1234", roles: [{
   role: "read", db: "test"}]});

进行登陆测试。

mongo -utest_user -p1234 --authenticationDatabase test

请添加图片描述

1.1.2 管理角色

MongoDB 提供以下默认的数据库管理角色:

  • dbAdmin:该角色可以管理数据库中的集合与索引,具有创建和删除的权限,但不能为数据库创建新角色和用户,也不能管理其他角色。
  • userAdmin:该角色可以管理数据库中的其他用户和角色,可以进行授权或者回收权限。
  • dbOwner:该角色可以管理数据库中的所有集合和索引,也可以管理数据库中的用户和权限,相当于是 readWrite、dbAdmin、userAdmin 三种角色的组合权限。
1.1.3 其他角色

前面介绍的角色,都作用于特定的数据库,接下来介绍的角色,可以作用于所有的数据库(local 与 config 数据库除外)进行管理和操作。

针对所有数据库(可以理解为所有由用户创建的数据库)进行管理操作的权限如下:

  • readAnyDatabase:该角色可以对所有数据库进行读操作,相当于是 read 角色的全局范围角色。
  • readWriteAnyDatabase:该角色可以对所有数据库进行读写操作,相当于是 readWrite 角色的全局范围角色。
  • dbAdminAnyDatabase:该角色可以管理所有数据库中的集合和索引,相当于是 dbAdmin 角色的全局范围角色。
  • userAdminAnyDatabase:该角色可以管理所有数据库中的角色和用户的权限,相当于是 userAdmin 角色的全局范围角色。

授权案例,创建一个全局只读的角色。

use admin;
db.createUser({
   user: "test_admin1", pwd: "1234", roles: [{
   role: "readAnyDatabase", db: "admin"}]});

使用全局的角色时 db 需要填写为 admin 负责会创建失败。

1.1.4 超级用户角色

MongoDB 默认提供了一个 root 超级用户角色,当为一个用户分配 root 角色后,该用户将同时拥有刚才介绍的所有角色的权限,另外还有 clussterAdmin、restore、backup 的角色权限。

root 角色,创建示例:

use admin
db.createUser({
   user: "root",pwd: "admin123",roles: [{
   role: "root", db: "admin"}]})

1.2 用户管理

本小节介绍如何对 MongoDB 中的用户进行管理,例如创建、删除、修改密码等。

1.2.1 查看用户

查看数据库中所有的用户,可以使用如下命令:

db.getUsers();
1.2.2 创建新用户

授权案例,为 test 库创建一个 test_user 用户,具有只读权限。

use test;
db.createUser({
   user: "test_user", pwd: "1234", roles: [{
   role: "read", db: "test"}]});
1.2.3 调整角色

通过执行如下命令,可以修改用户的角色。

db.grantRolesToUser()

例如,将刚才创建的 test_user 只有 read 角色,无法查看用户相关的信息:

myReplSet:PRIMARY> db.getUsers();
2024-02-20T16:08:50.236+0800 E  QUERY [js] uncaught exception: Error: not authorized on test to execute command {
    usersInfo: 1.0, lsid: {
    id: UUID("3cd3d4c7-cc42-447d-b782-b2773b7193c2") }, $clusterTime: {
    

使用高权限账户,为其添加一个 userAdmin 角色:

db.grantRolesToUser( "test_user", [{
   role: "userAdmin", db: "test"}])

再次使用 test_user 查看用户相关信息,没有报错:

>>> mongo -utest_user -p1234 --authenticationDatabase test
MongoDB shell version v4.2.25

myReplSet:PRIMARY> db.getUsers()
[
  {
   
    "_id" : "test.test_admin",
    "userId" : UUID("753e07d3-7f32-4f69-b53a-10a0d33d0d02"),
    "user" : "test_admin",
    "db" : "test",
    "roles" : [
      {
   
        "role" : "dbAdmin",
        "db" : "test"
      }
    ],
    "mechanisms" : [
      "SCRAM-SHA-1",
      "SCRAM-SHA-256"
    ]
  }
]
1.2.4 删除用户

删除单个用户的语法如下:

db.dropUser("username")

删除一个 db 下,所有的用户:

use test;
db.dropAllUsers();
1.2.4 修改密码

例如,将 user123 用户密码修改为 112233 的语法如下:

db.updateUser("user123",
  {
   
    pwd: '112233'
  }
)

相关推荐

  1. MongoDB用户权限相关

    2024-02-21 07:22:02       47 阅读
  2. MongoDB之安全管理

    2024-02-21 07:22:02       57 阅读
  3. MongoDB管理内存使用

    2024-02-21 07:22:02       35 阅读
  4. 2.MongoDB 用户管理

    2024-02-21 07:22:02       31 阅读
  5. linux的权限管理

    2024-02-21 07:22:02       56 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-21 07:22:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-21 07:22:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-21 07:22:02       82 阅读
  4. Python语言-面向对象

    2024-02-21 07:22:02       91 阅读

热门阅读

  1. 小程序怎么开发?怎么开发自己的小程序

    2024-02-21 07:22:02       60 阅读
  2. 使用 openssl 进行哈希计算

    2024-02-21 07:22:02       52 阅读
  3. Spring Cloud Sleuth:分布式链路跟踪

    2024-02-21 07:22:02       49 阅读
  4. 服务器防火墙的应用技术有哪些?

    2024-02-21 07:22:02       46 阅读
  5. 使用ZooKeeper实现分布式锁

    2024-02-21 07:22:02       56 阅读
  6. socket与rpc的区别

    2024-02-21 07:22:02       61 阅读
  7. 开源Excel 处理工具库MyExcel介绍以及简单例子

    2024-02-21 07:22:02       44 阅读