Mongo()
描述
Mongo(host, autoEncryptionOpts, api)
JavaScript构造函数,用于从
mongosh
或JavaScript文件中实例化数据库连接。Mongo()
方法有以下参数参数类型描述host
字符串或Mongo
实例autoEncryptionOpts
document可选。启用自动加密的配置参数客户端字段级加密.
autoEncryptionOpts
覆盖了数据库连接现有的客户端字段级加密配置。如果省略,Mongo()
继承了当前数据库连接的客户端字段级加密配置。有关用法和语法详情,请参阅
AutoEncryptionOpts
。api
document
兼容性
此方法在以下环境中可用
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>, "tlsOptions": <object> }
autoEncryptionOpts
文档包含以下参数
参数 | 类型 | 描述 | |||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
keyVaultClient | Mongo() 连接对象。 | (可选) 存储密钥库集合的 MongoDB 集群。 指定指向集群的
如果省略 | |||||||||||||||||||||||||||
keyVaultNamespace | 字符串 | (必需) 密钥库集合的完整 命名空间。 | |||||||||||||||||||||||||||
kmsProviders | document | (必需) 客户端字段级加密用于管理客户主密钥 (CMK) 的 密钥管理服务 (KMS)。客户端字段级加密使用 CMK 加密和解密数据加密密钥。 客户端字段级加密支持以下 KMS 提供商 如果可能,请考虑将
| |||||||||||||||||||||||||||
schemaMap | document | (可选) 使用JSON schema Draft 4标准语法和加密特定关键字指定的自动客户端字段级加密规则。此选项与 有关完整文档,请参阅加密模式。 | |||||||||||||||||||||||||||
bypassAutoEncryption | 布尔型 | (可选) 指定 true 以绕过自动客户端字段级加密规则并执行显式(手动)的每个字段加密。 | |||||||||||||||||||||||||||
bypassQueryAnalysis | 布尔型 | ||||||||||||||||||||||||||||
explicitEncryptionOnly | 布尔型 | (可选) 将 true 指定为不使用自动加密或自动解密。您可以使用getKeyVault() 和getClientEncryption() 进行显式加密。此选项与schemaMap 互斥。如果省略,默认为false 。 | |||||||||||||||||||||||||||
tlsOptions | 对象 | (可选) TLS客户端证书和私钥文件的路径,格式为PEM( tlsCertificateKeyFile ),TLS客户端证书和私钥文件的密码(tlsCertificateKeyFilePassword ),或用于连接到KMS的TLS证书授权文件(tlsCAFile ),格式为PEM。有关这些选项的更多信息,请参阅TLS选项。 |
api
api
参数指定了稳定API的配置选项。您可以使用以下选项启用或禁用可选行为
选项 | 类型 | 描述 |
---|---|---|
version | 字符串 | 指定API版本。目前仅支持 "1" 版本。 |
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
使用客户端加密连接到集群
对 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();
有关客户端字段级加密方法的完整列表,请参阅客户端字段级加密方法。
连接到启用自动客户端加密的集群
要配置本地管理的密钥的客户端字段级加密
生成一个不带换行符的 96 字节 base64 编码字符串
使用
mongosh
加载密钥
export TEST_LOCAL_KEY=$(echo "$(head -c 96 /dev/urandom | base64 | tr -d '\n')") mongosh --nodb
以下操作在 mongosh
会话内部创建一个新的连接对象。选项 AutoEncryptionOpts
指定了在 hr.employees
集合上启用 自动客户端加密 所需的选项
var autoEncryptionOpts = { "keyVaultNamespace" : "encryption.__dataKeys", "kmsProviders" : { "local" : { "key" : BinData(0, process.env["TEST_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 且有权访问指定数据加密密钥的客户端才能解密字段。
以下操作在 mongosh
会话中创建一个新的连接对象。选项 mongo.tlsOptions
允许使用 KMIP 作为 KMS 提供程序进行连接。
var csfleConnection = { keyVaultNamespace: "encryption.__keyVault", kmsProviders: { kmip: { endpoint: "kmip.example.com:123" } }, tlsOptions: { kmip: { tlsCertificateKeyFile: "/path/to/client/cert-and-key-bundle.pem" } } } cluster = Mongo( "mongodb://mymongo.example.net:27017/?replicaSet=myMongoCluster", csfleConnection );
有关客户端字段级加密方法的完整列表,请参阅客户端字段级加密方法。
使用启用稳定 API 的集群进行连接
以下操作在 mongosh
会话中创建一个新的连接对象。选项 api
启用稳定 API V1 并指定您不能运行已弃用命令或稳定 API 之外的命令。
cluster = Mongo( "mongodb://mymongo.example.net:27017/?replicaSet=myMongoCluster", null, { api: { version: "1", strict: true, deprecationErrors: true } } )
要与 mymongo.example.net:27017
集群交互,对 cluster
对象发出操作。有关稳定 API 命令的完整列表,请参阅 稳定 API 命令。