Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs 菜单
Docs 主页
/ /

db.createEncryptedCollection()(mongosh方法)

7.0 版本中的新增功能

db.createEncryptedCollection(collName, options)

db.createEncryptedCollection() 在当前数据库上创建由 collName 指定的加密集合。

此方法是 ClientEncryption.createEncryptedCollection() 的包装器,如果 encryptedFields.fields[*].keyIdnull 或在 options.createCollectionOptions.encryptedFields 定义中省略,则会自动创建数据键。

此命令可用于以下环境中托管的部署:

  • MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务

db.createEncryptedCollection() 通过以下语法实现:

db.createEncryptedCollection(
collName,
{
provider: kmsProviderName,
createCollectionOptions: encryptedFieldsMap,
masterKey: customerMasterKeyCredentials
}
)

db.createEncryptedCollection() 采用这些字段:

字段
类型
必要性
说明

collName

字符串

必需

要在当前数据库上加密的集合的名称。

options

文档

必需

用于配置加密collection的选项。

options.provider

字符串

必需

用于存储客户主密钥的 KMS。

options.createCollectionOptions

文档

必需

要加密的字段。必须包含 encryptedFields文档。有关如何配置encryptedFields文档的详细信息,请参阅指定加密字段

options.masterKey

文档

Optional

指定当KMS提供商为 AWS、 GCP或Azure时访问权限主密钥所需的凭证和密钥标识字段。当KMS提供商为 local 时,为可选。

mongosh客户端字段级别和可查询Queryable Encryption方法需要为客户端加密配置数据库连接。 如果当前数据库连接不是在启用客户端字段级加密的情况下启动的,则:

or

db.createEncryptedCollection() 方法在当前 db 的上下文中运行,并使用与当前 mongosh 会话相同的启用了Queryable加密的连接。它在内部使用当前数据库名称、指定的集合名称和提供的选项文档调用 ClientEncryption.createEncryptedCollection()

options.createCollectionOptions.encryptedFields.fields[*].keyIdnull 或被省略时,该方法会自动在密钥保管库中创建所需的数据密钥,并在创建的集合的 encryptedFields 定义中填充相应的 keyId 值。

以下示例使用本地托管的 KMS 进行 Queryable Encryption 配置。

1
  1. 启动 mongosh

    运行:

    mongosh --nodb

    --nodb 表示不连接到数据库。

  2. 生成密钥string

    生成一个基本 64 96 字节的string :

    const TEST_LOCAL_KEY = require("crypto").randomBytes(96).toString("base64")
  3. 创建加密选项对象

    要创建客户端字段级加密选项对象,请使用上一步中的 TEST_LOCAL_KEY string :

    var autoEncryptionOpts = {
    "keyVaultNamespace" : "encryption.__dataKeys",
    "kmsProviders" : {
    "local" : {
    "key" : BinData(0, TEST_LOCAL_KEY)
    }
    }
    }
  4. 创建加密客户端对象

    要创建加密的客户端对象,请使用Mongo()构造函数。 将 mongodb://myMongo.example.net URI 替换为目标集群的连接string URI 。 示例:

    encryptedClient = Mongo(
    "mongodb://myMongo.example.net:27017/?replSetName=myMongo",
    autoEncryptionOpts
    )
2

创建encryptedFieldsMap以指定要加密的字段:

const encryptedFieldsMap = {
encryptedFields: {
fields: [
{
path: "secretField",
bsonType: "string",
queries: { queryType: "equality" },
// keyId omitted; db.createEncryptedCollection() generates it
},
],
},
};
3

在当前数据库上使用助手创建加密的enc.users集合:

const encDb = encryptedClient.getDB("enc");
let result = encDb.createEncryptedCollection(
"users",
{
provider: "local",
createCollectionOptions: encryptedFieldsMap,
masterKey: {} // masterKey is optional when provider is local
}
);
4

db.createEncryptedCollection() 返回一个结果对象,其中包括创建的集合名称和该集合的 encryptedFields 定义。

检查 result.collection 的值,确认已在所需位置创建集合,并可选择检查已填充的 encryptedFields

enc> result.collection
enc.users
enc> result.encryptedFields
{
fields: [
{
path: "secretField",
bsonType: "string",
queries: { queryType: "equality", /* ... */ },
keyId: UUID("...")
}
]
}

后退

db.createCollection

在此页面上