面试题答案
一键面试1. 访问控制列表(ACL)在MongoDB中的作用
MongoDB本身没有传统意义上像网络设备那样的ACL概念,但通过开启身份验证和角色权限管理,可以间接实现类似对数据库访问进行控制的效果。开启身份验证后,只有通过认证的用户才能访问数据库,这限制了非法访问,相当于一种访问控制。
2. 角色权限管理基础
- 角色概念:MongoDB中的角色是一组预定义的权限集合。例如,
read
角色允许用户读取数据,readWrite
角色允许用户读取和写入数据。除了内置角色,用户还可以创建自定义角色。 - 权限类型:主要有数据库级别的权限(如对某个数据库的读写权限)和集群级别的权限(如管理复制集的权限)。
3. 创建不同权限的角色并分配给用户示例
创建只读角色并分配给用户
-
连接到MongoDB shell:
mongo
-
切换到admin数据库:
use admin
-
创建只读角色:
db.createRole( { role: "myReadOnlyRole", privileges: [ { resource: { db: "testDB", collection: "" }, actions: ["find"] } ], roles: [] } );
这里创建了一个名为
myReadOnlyRole
的角色,该角色对testDB
数据库下所有集合只有find
(查询)权限。 -
创建用户并分配角色:
db.createUser( { user: "readOnlyUser", pwd: "password123", roles: [ { role: "myReadOnlyRole", db: "testDB" } ] } );
此操作创建了一个名为
readOnlyUser
的用户,并将myReadOnlyRole
角色分配给该用户,作用于testDB
数据库。
创建读写角色并分配给用户
-
切换到admin数据库:
use admin
-
创建读写角色:
db.createRole( { role: "myReadWriteRole", privileges: [ { resource: { db: "testDB", collection: "" }, actions: ["find", "insert", "update", "delete"] } ], roles: [] } );
这里创建的
myReadWriteRole
角色对testDB
数据库下所有集合有查询、插入、更新和删除权限。 -
创建用户并分配角色:
db.createUser( { user: "readWriteUser", pwd: "password456", roles: [ { role: "myReadWriteRole", db: "testDB" } ] } );
此操作创建了
readWriteUser
用户,并将myReadWriteRole
角色分配给该用户,作用于testDB
数据库。
4. 安全加固注意事项
- 最小权限原则:为用户分配角色时,遵循最小权限原则,只赋予其完成工作所需的最低权限,降低安全风险。
- 定期审查:定期审查用户及其角色权限,及时删除不必要的用户和调整权限,确保数据库安全。
- 密码安全:使用强密码,并定期更新用户密码。