Docs 菜单
Docs 主页
/ /

db.createEncryptedCollection()(mongosh方法)

7.0 版本中的新增功能

db.createEncryptedCollection(collName, options)

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

此方法是ClientEncryption.createEncryptedCollection() encryptedFields.fields[*].keyIdnulloptions.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 的上下文中运行,并使用与当前 会话相同的启用了Queryable Encryption的连接。它在内部使用当前数据库名称、指定的集合名称和提供的选项文档调用mongosh 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

在此页面上