MongoDB\Database::createEncryptedCollection()
1.16 版本新增。
定义
MongoDB\Database::createEncryptedCollection()
显式创建加密collection。
function createEncryptedCollection( string $collectionName, MongoDB\Driver\ClientEncryption $clientEncryption, string $kmsProvider, ?array $masterKey, array $options ): array 此方法将自动为
keyId
为null
的任何加密字段创建数据密钥。 数据密钥将使用 MongoDB\Driver\ClientEncryption::createDataKey() 创建 以及提供的$kmsProvider
和$masterKey
参数。除了创建集合的结果之外,还会返回修改后的encryptedFields
选项的副本。此方法不会影响现有
MongoDB\Client
对象上的任何自动加密设置。 使用createEncryptedCollection()
创建加密集合后,用户必须配置自动加密。
参数
$collectionName
: 细绳- 要创建的加密collection的名称。
$clientEncryption
: MongoDB\Driver\ClientEncryption- 用于创建数据密钥的 ClientEncryption 对象。
$kmsProvider
: 细绳- KMS 提供商(例如 “local”、“ Amazon Web Services ”),用于加密新数据密钥。 这对应于
$kmsProvider
MongoDB\Driver\ClientEncryption::createDataKey() 的 参数。 $masterKey
: array|null将用于加密新数据密钥的 KMS 特定密钥选项。 这对应于
masterKey
MongoDB\Driver\ClientEncryption::createDataKey() 的 选项。如果
$kmsProvider
为“local”,则应为null
。$options
: array指定所需选项的数组。
$options
参数支持与MongoDB\Database::createCollection()
相同的选项。encryptedFields
选项是必需的。
Return Values
一个元组(即 双元素数组),包含创建命令的结果文档(根据typeMap
选项的数组或对象)和修改后的encryptedFields
选项。
错误/异常
MongoDB\Exception\CreateEncryptedCollectionException
如果在创建数据键或collection时遇到任何错误)。原始异常和修改后的encryptedFields
选项可以分别通过getPrevious()
和getEncryptedFields()
方法访问。
MongoDB\Exception\InvalidArgumentException
用于与参数或选项解析相关的错误。
例子
users
test
以下示例在数据库中创建了一个加密的collection集合。users
集合中的ssn
字段将被定义为加密字符串字段。
// 96-byte master key used to encrypt/decrypt data keys define('LOCAL_MASTERKEY', '...'); $client = new MongoDB\Client; $clientEncryption = $client->createClientEncryption([ 'keyVaultNamespace' => 'keyvault.datakeys', 'kmsProviders' => [ 'local' => ['key' => new MongoDB\BSON\Binary(base64_decode(LOCAL_MASTERKEY), 0)], ], ); [$result, $encryptedFields] = $client->test->createEncryptedCollection( 'users', $clientEncryption, 'local', null, [ 'encryptedFields' => [ 'fields' => [ ['path' => 'ssn', 'bsonType' => 'string', 'keyId' => null], ], ], ] );
如果加密集合已成功创建,$result
将包含 命令的响应文档, 将包含create
$encryptedFields['fields'][0]['keyId']
MongoDB\BSON\Binary 子类型为4 的对象(即UUID)。
然后,修改后的encryptedFields
选项可用于构造启用自动加密的新MongoDB\Client
。
$encryptedClient = new MongoDB\Client( null, // Connection string [], // Additional connection string options [ 'autoEncryption' => [ 'keyVaultNamespace' => 'keyvault.datakeys', 'kmsProviders' => [ 'local' => ['key' => new MongoDB\BSON\Binary(base64_decode(LOCAL_MASTERKEY), 0)], ], 'encryptedFieldsMap' => [ 'test.users' => $encryptedFields, ], ], ] );