MST

星途 面试题库

面试题:MongoDB权限管理在增删改查中的应用

请阐述MongoDB的权限管理机制如何应用于增删改查操作,以确保数据的安全性。例如,如何通过角色和权限设置,限制特定用户只能对某些集合进行特定的增删改查操作。
22.4万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试
  1. 用户和角色基础概念
    • 用户:在MongoDB中,用户是权限管理的主体,通过用户名、密码和所属数据库进行标识。
    • 角色:角色是一组权限的集合,MongoDB提供了一些内置角色,如readreadWritedbAdmin等,也可以自定义角色。
  2. 内置角色用于增删改查操作
    • 读操作(查)
      • 若希望用户只能进行读取操作,可以给用户赋予read角色。例如,在admin数据库下创建一个具有read角色的用户:
use admin
db.createUser(
  {
    user: "readOnlyUser",
    pwd: "password",
    roles: [ { role: "read", db: "targetDB" } ]
  }
)
 - 该用户`readOnlyUser`只能读取`targetDB`数据库中的数据。
  • 读写操作(增、改、查)
    • 赋予readWrite角色可进行增、改、查操作。以在admin数据库下创建具有readWrite角色的用户为例:
use admin
db.createUser(
  {
    user: "readWriteUser",
    pwd: "password",
    roles: [ { role: "readWrite", db: "targetDB" } ]
  }
)
 - `readWriteUser`用户可以对`targetDB`数据库中的集合进行插入(增)、更新(改)和查询(查)操作。

3. 自定义角色实现更细粒度控制

  • 限制特定集合的操作
    • 假设要创建一个用户,只能对targetDB数据库中的specificCollection集合进行插入和查询操作。首先自定义一个角色:
use targetDB
db.createRole(
  {
    role: "customInsertReadRole",
    privileges: [
      {
        resource: { db: "targetDB", collection: "specificCollection" },
        actions: [ "insert", "find" ]
      }
    ],
    roles: []
  }
)
 - 然后创建用户并赋予该自定义角色:
use admin
db.createUser(
  {
    user: "customUser",
    pwd: "password",
    roles: [ { role: "customInsertReadRole", db: "targetDB" } ]
  }
)
  • 复杂权限组合
    • 若要对多个集合进行不同的增删改查操作,可以在自定义角色的privileges数组中添加多个资源和操作的组合。例如,对collection1可以插入和更新,对collection2只能查询:
use targetDB
db.createRole(
  {
    role: "complexCustomRole",
    privileges: [
      {
        resource: { db: "targetDB", collection: "collection1" },
        actions: [ "insert", "update" ]
      },
      {
        resource: { db: "targetDB", collection: "collection2" },
        actions: [ "find" ]
      }
    ],
    roles: []
  }
)
 - 再创建用户并赋予此角色:
use admin
db.createUser(
  {
    user: "complexUser",
    pwd: "password",
    roles: [ { role: "complexCustomRole", db: "targetDB" } ]
  }
)
  1. 验证权限
    • 用户连接到MongoDB后,其权限会在执行操作时进行验证。例如,上述readOnlyUser尝试插入数据时会收到权限不足的错误,而具有相应权限的用户则可以成功执行操作。

通过上述基于角色和权限设置的方式,可以有效限制特定用户只能对某些集合进行特定的增删改查操作,确保数据的安全性。