MST
星途 面试题库

面试题:MongoDB数据安全性中的访问控制与加密机制

MongoDB提供了哪些访问控制机制来保障数据安全?请详细说明基于角色的访问控制(RBAC)在MongoDB中的工作原理及如何配置。另外,MongoDB的数据加密机制有哪些,它们分别适用于哪些场景?
20.4万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试

MongoDB访问控制机制

  1. 用户认证
    • MongoDB支持多种认证机制,如SCRAM - SHA - 1、SCRAM - SHA - 256等。用户在连接MongoDB时,需要提供用户名和密码进行身份验证。只有通过认证的用户才能访问数据库资源。
  2. 基于角色的访问控制(RBAC)
    • 工作原理
      • 在MongoDB中,角色定义了一组权限。权限规定了对数据库、集合等资源的操作许可,如读、写、创建索引等。
      • 用户被分配一个或多个角色,从而继承这些角色所包含的权限。角色可以是内置角色,也可以是用户自定义角色。例如,read角色允许用户读取指定数据库中的数据,readWrite角色允许用户对指定数据库进行读写操作。
      • 角色可以在不同的作用域(数据库级别或集群级别)定义。集群级别角色(如clusterAdmin)具有管理整个集群的权限,而数据库级别角色(如dbOwner)只对特定数据库有管理权限。
    • 配置步骤
      • 创建用户:使用db.createUser()方法创建用户,并为其指定初始角色。例如,要创建一个具有readWrite角色的用户testUser
use admin
db.createUser(
  {
    user: "testUser",
    pwd: "password123",
    roles: [ { role: "readWrite", db: "testDB" } ]
  }
);
 - **创建自定义角色**:可以使用`db.createRole()`方法创建自定义角色。例如,创建一个具有特定集合读写权限的自定义角色:
use testDB
db.createRole(
  {
    role: "customRWRole",
    privileges: [
      {
        resource: { db: "testDB", collection: "testCollection" },
        actions: [ "insert", "update", "delete", "find" ]
      }
    ],
    roles: []
  }
);
 - **为用户添加或修改角色**:可以使用`db.grantRolesToUser()`或`db.updateUser()`方法为用户添加或修改角色。例如,为`testUser`添加`customRWRole`角色:
use testDB
db.grantRolesToUser(
  "testUser",
  [ { role: "customRWRole", db: "testDB" } ]
);

MongoDB数据加密机制

  1. 客户端加密
    • 适用场景:适用于需要在客户端对敏感数据进行加密,确保数据在传输到MongoDB服务器之前就已加密的场景。例如,金融应用中对用户的银行卡号、密码等数据进行加密。
    • 原理:客户端使用本地密钥库中的加密密钥对数据进行加密,然后将加密后的数据发送到MongoDB服务器存储。在读取数据时,客户端使用相应的解密密钥进行解密。
  2. 服务器端加密
    • WiredTiger存储引擎加密
      • 适用场景:适用于对整个数据库文件进行加密,保障数据在存储时的安全性。例如,对于一些对数据保密性要求较高的企业级应用,防止存储设备丢失或被盗时数据泄露。
      • 原理:MongoDB使用WiredTiger存储引擎的加密功能,在存储数据时对数据库文件进行加密。需要在启动MongoDB时配置加密密钥,密钥可以通过文件或其他安全方式提供。
    • 透明数据加密(TDE)
      • 适用场景:同样适用于保障存储数据的安全性,在企业级环境中防止数据在存储层面被非法访问。
      • 原理:TDE在数据写入磁盘时进行加密,读取时进行解密,这个过程对应用程序是透明的。MongoDB通过操作系统提供的加密功能(如Linux的dm - crypt)来实现TDE。