MongoDB 安全、监控与备份 (Mongodump)
MongoDB 的一个关键概念是数据库的管理。安全性、备份、数据库访问等重要方面,在数据库管理方面都是重要的概念。
MongoDB 安全概述
MongoDB 具有为数据库定义安全机制的能力。默认情况下,您不会希望每个人都能随意访问 MongoDB 中的所有数据库,因此在 MongoDB 中拥有某种安全机制的需求非常重要。
以下是实现数据库安全性的最佳实践:
- 启用访问控制 – 创建用户,以便所有应用程序和用户在访问 MongoDB 中的数据库时都必须具有某种身份验证机制。
- 配置基于角色的访问控制 – 有时可能需要逻辑权限分组,可以将其组合到角色中。然后可以为用户分配这些角色。
- 尝试配置 MongoDB 使用某种加密协议,如 TLS 或 SSL。这些协议可用于加密在客户端和 MongoDB 环境之间传输的数据。
- 配置审计 – 管理员通常需要知道谁在做什么,这有助于后续的问题分析。最佳方法是在 MongoDB 中启用审计。
- 使用具有对服务器环境中所需资源访问权限的独立用户 ID 来运行 MongoDB 服务器实例。
MongoDB 备份过程 – mongodump
在使用 MongoDB 时,务必始终确保已建立备份机制,以防 MongoDB 中的数据因任何原因损坏。
以下是 MongoDB 内部提供的备份机制:
- 通过复制底层数据文件进行备份 – 这可能是最简单的机制,只需复制 MongoDB 所属的数据文件,并将其复制到另一个位置,该位置最好是另一台服务器。
- 使用 mongodump 备份数据库 – mongodump 工具读取 MongoDB 数据库中的数据并创建高保真 BSON 文件。需要考虑的是,如果数据集的容量很大,那么 mongodump 可能会非常消耗资源,因此为了缓解这个问题,应在辅助服务器上运行该实用程序。
- MongoDB Cloud Manager 备份 – MongoDB Cloud Manager 通过读取 MongoDB 环境中的 oplog 数据来持续备份 MongoDB 副本集和分片集群。MongoDB Cloud Manager 可以通过存储 oplog 数据来创建时间点恢复,以便能够为特定的副本集或分片集群随时进行恢复。
MongoDB 监控
监控是 MongoDB 中最重要的管理活动之一。这是因为通过监控环境中的潜在问题,您可以更加积极主动。
以下是一些实施监控的示例:
- mongostat 将告诉您数据库操作(如插入、查询、更新、删除等)在服务器上实际发生的次数。这将很好地说明服务器正在处理多少负载,并表明您是否需要服务器上的额外资源,或者可能需要其他服务器来分发负载。
- mongotop 跟踪并报告 MongoDB 实例当前的读写活动,并按集合报告这些统计信息。
- MongoDB 提供了一个 Web 界面,以简单的网页形式展示诊断和监控信息。您可以在本地服务器上浏览以下 URL 来打开 Web 管理工具:
https://:28017
- serverStatus 命令,或 shell 中的 db.serverStatus(),返回数据库状态的概述,包括磁盘使用情况、内存使用情况、建立到 MongoDB 环境的连接等详细信息。
MongoDB 索引和性能考虑因素
- 索引在任何数据库中都非常重要,可用于提高 MongoDB 中搜索查询的效率。如果您一直在执行文档搜索,那么最好在用于搜索条件文档的字段上添加索引。
- 尽量始终限制返回的查询结果数量。假设您有一个文档中有 2 个字段名,但您只想查看文档中的 2 个字段。那么请确保您的查询仅针对您需要的 2 个字段进行显示,而不是所有字段。
- 如果您想查看特定字段值,那么只在查询中使用这些字段。如果不需要收集中的所有字段,请不要查询所有字段。
使用 Kerberos 身份验证配置 MongoDB
授权关注的是确保客户端访问系统,而身份验证则检查客户端在被授权进入系统后在 MongoDB 中拥有何种类型的访问权限。
有各种各样的身份验证机制,以下仅列举其中几个。
使用 x.509 证书进行 MongoDB 身份验证
使用 x.509 证书对客户端进行身份验证 – 证书本质上是客户端和 MongoDB 服务器之间的受信任签名。
因此,不必输入用户名和密码来连接到服务器,而是由证书在客户端和 MongoDB 服务器之间传递。客户端将拥有一个客户端证书,该证书将传递给服务器以进行身份验证。每个客户端证书对应一个 MongoDB 用户。因此,MongoDB 中的每个用户都必须拥有自己的证书才能向 MongoDB 服务器进行身份验证。
为确保此操作正常工作,必须遵循以下步骤:
- 必须从受信任的第三方机构购买有效证书,并将其安装在 MongoDB 服务器上。
- 客户端证书必须具有以下属性(必须由一个证书颁发机构 (CA) 为客户端和服务器颁发证书。客户端证书必须包含以下字段 – keyUsage 和 extendedKeyUsage。
- 连接到 MongoDB 服务器的每个用户都需要一个单独的证书。
如何使用 Kerberos 身份验证配置 MongoDB
以下是在 Windows 上使用 Kerberos 身份验证配置 MongoDB 的步骤:
第 1 步) 在 Windows 上使用 Kerberos 身份验证配置 MongoDB
Kerberos 是一种在大型客户端-服务器环境中使用的身份验证机制。
它是一种非常安全的机制,其中密码仅在加密后才允许。MongoDB 具备针对现有基于 Kerberos 的系统进行身份验证的功能。
第 2 步) mongod.exe 服务器进程
接下来,启动 mongod.exe 服务器进程。
第 3 步) mongo.exe 客户端进程并连接
接下来,启动 mongo.exe 客户端进程并连接到 MongoDB 服务器。
第 4 步) 在 MongoDB 中添加用户
这基本上是添加到 $external 数据库的 Kerberos principal 名称。$external 数据库是一个特殊的数据库,它告诉 MongoDB 对此用户使用 Kerberos 系统进行身份验证,而不是使用其内部系统。
use $external db.createUser( { user: "user1@example.NET", roles:[ { role: "read" , db:"Marketing"} } ] }
第 5 步) 开始使用命令
使用以下命令启动支持 Kerberos 的 mongod.exe
mongod.exe –auth –setParameter authenticationMechanisms=GSSAPI
然后,您现在可以使用 Kerberos 用户和 Kerberos 身份验证连接到数据库。
摘要
- 在数据库中实施安全性以确保数据库中的数据安全至关重要。
- 可以使用 createUser 命令在数据库中创建用户。可以为用户分配特定的角色,以赋予他们在数据库本身上的特定权限。
- 可以为所有数据库或仅为特定数据库添加管理员。这是通过赋予 userAdmin 或 userAdminAnyDatabase 角色来实现的。
- 始终备份您的 MongoDB 环境,以便在发生任何灾难时,数据可以轻松恢复。
- 始终监控您的 MongoDB 环境,以便更加积极主动,并在问题发生之前看到它们。
- 有各种身份验证机制可为数据库提供更好的安全性。一个例子是使用证书对用户进行身份验证,而不是使用用户名和密码。