Mongo()
在此页面上
说明
Mongo(host, ClientSideFieldLevelEncryptionOptions, api)
JavaScript 构造函数,用于实例化来自
mongosh
或 JavaScript 文件的数据库连接。Mongo()
方法具有以下参数:Parameter类型说明host
字符串可选。主机,采用
<host>
或<host><:port>
形式。如果省略,
Mongo()
会在以下默认端口27017
上实例化与本地主机接口的连接:ClientSideFieldLevelEncryptionOptions
文档可选。 用于启用客户端字段级加密的配置参数。
ClientSideFieldLevelEncryptionOptions
覆盖数据库连接的现有客户端字段级加密配置。 如果省略,Mongo()
会继承当前数据库连接的客户端字段级加密配置。有关用法和语法的详细信息,请参见
ClientSideFieldLevelEncryptionOptions
。api
文档
ClientSideFieldLevelEncryptionOptions
ClientSideFieldLevelEncryptionOptions
文档指定客户端字段级加密的配置选项。如果数据库连接已有客户端字段级加密配置,则指定 ClientSideFieldLevelEncryptionOptions
会覆盖该配置。
例如,使用客户端字段级加密mongosh
命令行选项 启动 ,可为该连接启用客户端加密。使用Mongo()
创建的新数据库连接会继承加密设置,除非Mongo()
包含ClientSideFieldLevelEncryptionOptions
。
ClientSideFieldLevelEncryptionOptions
文档的语法如下:
{ "keyVaultClient" : <object>, "keyVaultNamespace" : "<string>", "kmsProviders" : <object>, "schemaMap" : <object>, "bypassAutoEncryption" : <boolean> }
ClientSideFieldLevelEncryptionOptions
文档采用以下参数:
Parameter | 类型 | 说明 | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
keyVaultClient | Mongo() 连接对象。 | (可选)托管密钥保管库集合的 MongoDB cluster。 指定指向集群的
如果 | ||||||||||||||||||||||||
keyVaultNamespace | 字符串 | (必填)密钥保管库集合的完整命名空间 。 | ||||||||||||||||||||||||
kmsProviders | 文档 | (必填)客户端字段级加密使用的密钥管理服务(KMS),用于管理客户主密钥(CMK)。客户端字段级加密使用 CMK 对数据加密密钥进行加密及解密。 客户端字段级加密支持以下 KMS 提供程序: 如果可能,请考虑将
| ||||||||||||||||||||||||
schemaMap | 文档 | (可选)使用 JSON 模式草稿 4 标准语法和特定加密关键字指定的自动客户端字段级加密规则。 有关完整文档,请参阅自动加密规则。 | ||||||||||||||||||||||||
bypassAutoEncryption | 布尔 | (可选)指定 true 可绕过自动客户端字段级加密规则并执行显式(手动)逐字段加密。 |
api
api
参数为 Stable 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
连接到已启用客户端加密的集群
为本地托管的密钥配置客户端字段级加密需要指定一个不带换行符的基本 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
会话中创建新的连接对象。 ClientSideFieldLevelEncryptionOptions
选项指定使用本地管理的密钥启用客户端字段级加密所需的选项:
var ClientSideFieldLevelEncryptionOptions = { "keyVaultNamespace" : "encryption.dataKeys", "kmsProviders" : { "local" : { "key" : BinData(0, TEST_LOCAL_KEY) } } } cluster = Mongo( "mongodb://mymongo.example.net:27017/?replicaSet=myMongoCluster", ClientSideFieldLevelEncryptionOptions )
对 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
会话中创建新的连接对象。ClientSideFieldLevelEncryptionOptions
选项指定在 hr.employees
集合上启用自动客户端加密所需的选项:
var ClientSideFieldLevelEncryptionOptions = { "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", ClientSideFieldLevelEncryptionOptions )
对 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 命令。