MST

星途 面试题库

面试题:MongoDB安全加固方案中访问控制的实现

在MongoDB安全加固方案里,如何通过访问控制列表(ACL)和角色权限管理来保障数据库的安全性?请举例说明如何创建不同权限的角色并分配给用户。
23.7万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试

1. 访问控制列表(ACL)在MongoDB中的作用

MongoDB本身没有传统意义上像网络设备那样的ACL概念,但通过开启身份验证和角色权限管理,可以间接实现类似对数据库访问进行控制的效果。开启身份验证后,只有通过认证的用户才能访问数据库,这限制了非法访问,相当于一种访问控制。

2. 角色权限管理基础

  • 角色概念:MongoDB中的角色是一组预定义的权限集合。例如,read角色允许用户读取数据,readWrite角色允许用户读取和写入数据。除了内置角色,用户还可以创建自定义角色。
  • 权限类型:主要有数据库级别的权限(如对某个数据库的读写权限)和集群级别的权限(如管理复制集的权限)。

3. 创建不同权限的角色并分配给用户示例

创建只读角色并分配给用户

  1. 连接到MongoDB shell

    mongo
    
  2. 切换到admin数据库

    use admin
    
  3. 创建只读角色

    db.createRole(
        {
            role: "myReadOnlyRole",
            privileges: [
                {
                    resource: { db: "testDB", collection: "" },
                    actions: ["find"]
                }
            ],
            roles: []
        }
    );
    

    这里创建了一个名为myReadOnlyRole的角色,该角色对testDB数据库下所有集合只有find(查询)权限。

  4. 创建用户并分配角色

    db.createUser(
        {
            user: "readOnlyUser",
            pwd: "password123",
            roles: [
                { role: "myReadOnlyRole", db: "testDB" }
            ]
        }
    );
    

    此操作创建了一个名为readOnlyUser的用户,并将myReadOnlyRole角色分配给该用户,作用于testDB数据库。

创建读写角色并分配给用户

  1. 切换到admin数据库

    use admin
    
  2. 创建读写角色

    db.createRole(
        {
            role: "myReadWriteRole",
            privileges: [
                {
                    resource: { db: "testDB", collection: "" },
                    actions: ["find", "insert", "update", "delete"]
                }
            ],
            roles: []
        }
    );
    

    这里创建的myReadWriteRole角色对testDB数据库下所有集合有查询、插入、更新和删除权限。

  3. 创建用户并分配角色

    db.createUser(
        {
            user: "readWriteUser",
            pwd: "password456",
            roles: [
                { role: "myReadWriteRole", db: "testDB" }
            ]
        }
    );
    

    此操作创建了readWriteUser用户,并将myReadWriteRole角色分配给该用户,作用于testDB数据库。

4. 安全加固注意事项

  • 最小权限原则:为用户分配角色时,遵循最小权限原则,只赋予其完成工作所需的最低权限,降低安全风险。
  • 定期审查:定期审查用户及其角色权限,及时删除不必要的用户和调整权限,确保数据库安全。
  • 密码安全:使用强密码,并定期更新用户密码。