面试题答案
一键面试聚合操作权限控制
- 基于角色的权限控制:
- 创建具有聚合操作权限的角色,例如,使用
createRole
命令创建角色。比如创建一个名为aggregationRole
的角色,该角色拥有对特定数据库的聚合权限:
use admin db.createRole( { role: "aggregationRole", privileges: [ { resource: { db: "yourDatabaseName", collection: "" }, actions: ["aggregate"] } ], roles: [] } );
- 然后将这个角色授予需要执行聚合操作的用户,使用
grantRolesToUser
命令:
use admin db.grantRolesToUser( "yourUsername", [ { role: "aggregationRole", db: "admin" } ] );
- 创建具有聚合操作权限的角色,例如,使用
- 字段级权限控制:
- 在聚合管道中,可以通过
$project
阶段进行字段级别的过滤,确保用户只能看到授权的字段。例如:
这样可以防止用户获取敏感字段的数据。db.yourCollection.aggregate([ { $project: { authorizedField1: 1, authorizedField2: 1, _id: 0 } } ]);
- 在聚合管道中,可以通过
MongoDB安全配置要点
- 网络配置:
- 绑定IP:通过修改
mongod.conf
文件,将bindIp
设置为仅允许的IP地址,例如:
net: bindIp: 127.0.0.1,192.168.1.100 # 这里127.0.0.1允许本地连接,192.168.1.100为特定的远程可连接IP
- 端口:避免使用默认端口27017,修改为其他不常见端口,增加安全性。
- 绑定IP:通过修改
- 认证机制:
- 启用身份验证:在
mongod.conf
文件中设置security.authorization: enabled
,启用基于角色的访问控制(RBAC)。这样用户在连接MongoDB时必须提供有效的用户名和密码。 - 证书认证:可以使用X.509证书进行身份验证,增强安全性。配置
sslMode: requireSSL
以及相关的证书路径等参数。
- 启用身份验证:在
- 审计:
- 开启审计日志:在
mongod.conf
文件中配置审计选项,例如:
审计日志可以记录所有的数据库操作,便于追踪和排查安全问题。auditLog: destination: file path: /var/log/mongodb/audit.log format: JSON
- 开启审计日志:在
- 数据加密:
- 存储加密:使用WiredTiger存储引擎的加密功能,在启动MongoDB时通过
--encryptionKeyFile
参数指定加密密钥文件,对数据文件进行加密存储。 - 传输加密:启用SSL/TLS加密,确保客户端与服务器之间传输的数据加密,防止数据在传输过程中被窃取或篡改。
- 存储加密:使用WiredTiger存储引擎的加密功能,在启动MongoDB时通过