Mongo()
说明
兼容性
此方法可用于以下环境中托管的部署:
MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
AutoEncryptionOpts
autoEncryptionOpts
文档指定客户端字段级加密的配置选项。如果数据库连接已有客户端字段级加密配置,则指定 autoEncryptionOpts
会覆盖该配置。
例如,以 mongosh
开始的客户端字段级加密命令行选项可为该连接启用客户端加密。使用 Mongo()
创建的新数据库连接将继承加密设置,除非 Mongo()
包含 autoEncryptionOpts
。
autoEncryptionOpts
文档的语法如下:
{ "keyVaultClient" : <object>, "keyVaultNamespace" : "<string>", "kmsProviders" : <object>, "schemaMap" : <object>, "bypassAutoEncryption" : <boolean> }
autoEncryptionOpts
文档采用以下参数:
Parameter | 类型 | 说明 | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
| (可选)托管密钥保管库集合的 MongoDB cluster。
| ||||||||||||||||||||||||
| 字符串 | (必填)密钥保管库集合的完整命名空间 。 | ||||||||||||||||||||||||
| 文档 | (必填)客户端字段级加密使用的密钥管理服务(KMS),用于管理客户主密钥(CMK)。客户端字段级加密使用 CMK 对数据加密密钥进行加密及解密。 客户端字段级加密支持以下 KMS 提供商: 如果可能,可以考虑将
| ||||||||||||||||||||||||
| 文档 | (可选)使用 JSON 模式草稿 4 标准语法和特定加密关键字指定的自动客户端字段级加密规则。 有关完整的文档,请参阅加密模式。 | ||||||||||||||||||||||||
| 布尔 | (可选)指定 | ||||||||||||||||||||||||
| 布尔 | (可选)指定 |
api
api
参数为 Stable API 指定配置选项。您可以使用以下选项启用或禁用可选行为:
选项 | 类型 | 说明 |
---|---|---|
version | 字符串 | 指定 API 版本。 |
strict | 布尔 |
如果指定 如果未指定,则默认为 |
deprecationErrors | 布尔 | 如果为 如果未指定,则默认为 |
api
参数采用以下语法:
{ api: { version: <string>, strict: <boolean>, deprecationErrors: <boolean> } }
示例
连接到 MongoDB 集群
以下操作从 mongosh
会话中创建一个新的连接对象:
cluster = Mongo("mongodb://mymongo.example.net:27017/?replicaSet=myMongoCluster")
针对cluster
对象发出操作以与 mymongo.example.net:27017
集群交互:
myDB = cluster.getDB("myDB"); //returns the database object myColl = myDB.getCollection("myColl"); // returns the collection object
连接到已启用客户端加密的集群
键:
生成不带换行符的 base64 编码的 96 字节字符串
使用
mongosh
加载密钥
export TEST_LOCAL_KEY=$(echo "$(head -c 96 /dev/urandom | base64 | tr -d '\n')") mongosh --nodb
以下操作会在mongosh
会话中创建新的连接对象。 AutoEncryptionOpts
选项指定使用本地管理的密钥启用客户端字段级加密所需的选项:
var autoEncryptionOpts = { "keyVaultNamespace" : "encryption.__dataKeys", "kmsProviders" : { "local" : { "key" : BinData(0, process.env["TEST_LOCAL_KEY"]) } } } cluster = Mongo( "mongodb://mymongo.example.net:27017/?replicaSet=myMongoCluster", autoEncryptionOpts )
对 cluster
对象发出操作,以便与 mymongo.example.net:27017
集群交互并执行显式加密:
// returns the database object myDB = cluster.getDB("myDB"); // returns the collection object myColl = myDB.getCollection("myColl"); // returns object for managing data encryption keys keyVault = cluster.getKeyVault(); // returns object for explicit encryption/decryption clientEncryption = cluster.getClientEncryption();
有关客户端字段级加密方法的完整列表,请参阅客户端字段级加密方法。
连接到已启用自动客户端加密的集群
为本地托管的密钥配置客户端字段级加密需要指定一个不带换行符的基本 64 编码的 96 字节string 。 以下操作生成满足所述要求的密钥并将其加载到mongosh
中:
TEST_LOCAL_KEY=$(echo "$(head -c 96 /dev/urandom | base64 | tr -d '\n')") mongosh --nodb --shell --eval "var TEST_LOCAL_KEY='$TEST_LOCAL_KEY'"
以下操作从 mongosh
会话中创建新的连接对象。AutoEncryptionOpts
选项指定在 hr.employees
集合上启用自动客户端加密所需的选项:
var autoEncryptionOpts = { "keyVaultNamespace" : "encryption.dataKeys", "kmsProviders" : { "local" : { "key" : BinData(0,"BASE64-ENCODED-96-BYTE-LOCAL-KEY") } }, schemaMap : { "hr.employees" : { "bsonType": "object", "properties" : { "taxid" : { "encrypt" : { "keyId" : [UUID("bffb361b-30d3-42c0-b7a4-d24a272b72e3")], "bsonType" : "string", "algorithm" : "AEAD_AES_256_CBC_HMAC_SHA_512-Random" } }, "taxid-short": { "encrypt": { "keyId": [UUID("33408ee9-e499-43f9-89fe-5f8533870617")], "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", "bsonType": "string" } } } } } } cluster = Mongo( "mongodb://mymongo.example.net:27017/?replicaSet=myMongoCluster", autoEncryptionOpts )
对 cluster
对象发出操作,以便与 mymongo.example.net:27017
集群交互并使用自动加密:
// returns the database object myDB = cluster.getDB("myDB"); // returns the collection object myColl = myDB.getCollection("myColl"); myColl.insertOne( { "name" : "J Doe", "taxid" : "123-45-6789", "taxid-short" : "6789" } )
指定的自动加密规则使用指定的数据加密密钥和算法对 taxid
和 taxid-short
字段进行加密。只有配置了正确的 KMS 并且可以访问指定数据加密密钥的客户端才能解密该字段。
有关客户端字段级加密方法的完整列表,请参阅客户端字段级加密方法。
连接到已启用稳定 API 的集群
以下操作会从 mongosh
会话中创建新的连接对象。api
选项启用 Stable API V1,并指定不能运行已弃用的命令或 Stable API 之外的命令。
cluster = Mongo( "mongodb://mymongo.example.net:27017/?replicaSet=myMongoCluster", null, { api: { version: "1", strict: true, deprecationErrors: true } } )
要与 mymongo.example.net:27017
集群进行交互,请针对 cluster
对象发出操作。有关 Stable API 命令的完整列表,请参阅 Stable API 命令。