Encryption 是将从简单文本(信息的原始形式)转换成加密文本的信息片段的过程,这是一个无法读取的形式,只能由一个有正确加密器来解密的人或计算机读取。
您可以将 MongoDB 实例与需要访问的任何客户端或应用程序之间的通信加密,将其配置为需要使用 Transport Layer Security,也称为 TLS 的连接。
请注意,如果您已配置 Mongo 以要求使用 TLS 进行连接,则存储在数据库服务器上的静态数据,称为 data at rest,仍然不会被加密。
然而,即使启用了安静加密和过境加密,您的敏感数据仍然可能被未经批准的用户访问。 例如,考虑一个情形,您部署了分裂的 NoSQL 文档数据库以存储您开发的冰淇淋交付应用程序的数据。
在这种情况下,当客户订购时,他们被要求提交一些敏感信息,例如他们的家地址或信用卡号码。
1{
2 "name" : "Sammy Shark",
3 "address" : {
4 "street" : "602 Surf Ave",
5 "city" : "Brooklyn",
6 "state" : "New York",
7 "zip" : 11224
8 },
9 "phone" : "555-555-1234",
10 "creditcard" : "1234567890123456"
11}
这是一个潜在的安全漏洞,因为任何拥有访问数据库权限的人都可以看到并利用客户的敏感信息。
为了帮助减轻这种风险,由于版本 4.2 的 官方 MongoDB 驱动程序允许您执行 client-side field level encryption. 这意味着,当正确配置时,应用程序可以在数据发送到数据库之前加密文档中的某些字段。一旦数据被写入数据库,只有能够呈现正确的加密密密钥的应用程序或客户端才能解密和读取这些字段中的数据。
1{
2 "name" : "Sammy Shark",
3 "address" : {
4 "street" : BinData(6,"eirefi3eid5feiZae9t+oot0noh9oovoch3=iethoh9t"),
5 "city" : BinData(6,"xiesoh+aiveez=ngee1yei+u0aijah2eeKu7jeeB=oGh"),
6 "state" : "New York"
7 "zip" : BinData(6,"CoYeve+ziemaehai=io1Iliehoh6rei2+oo5eic0aeCh")
8 },
9 "phone" : BinData6,"quas+eG4chuolau6ahq=i8ahqui0otaek7phe+Miexoo"),
10 "creditcard" : BinData6,"rau0Teez=iju4As9Eeyiu+h4coht=ukae8ahFah4aRo="),
11}
MongoDB 将加密值存储为二进制数据,如前面示例中的BinData
类标签所示。每个值中的6
表示数据存储的二进制子类型,并表示已加密的二进制数据类型。