sgl*_*ski 6 sql-server encryption azure-sql-database azure-keyvault always-encrypted
是否可以通过与 SSMS 不同的方式生成 ENCRYPTED_VALUE?我喜欢为所选列启用“始终加密”功能,但我想知道如何通过未知密钥加密数据。
在我看来,总应该有一种方法可以在不连接到 azure key Vault 的情况下解密数据(就像我理解的 SQL Server 使用对称 AES256 加密数据一样)。
CREATE COLUMN ENCRYPTION KEY MyCEK
WITH VALUES
(
COLUMN_MASTER_KEY = MyCMK,
ALGORITHM = 'RSA_OAEP',
ENCRYPTED_VALUE = (i am talking about this value)
);
Run Code Online (Sandbox Code Playgroud)
在与谷歌进行搜索后,我发现了如何做到这一点。这是生成该值的示例代码(c#)。
var provider = new SqlColumnEncryptionAzureKeyVaultProvider(GetTokenAsync);
var randomBytes = new byte[32];
using (var rng = new RNGCryptoServiceProvider())
{
rng.GetBytes(randomBytes);
}
var base64 = Convert.ToBase64String(randomBytes);
var encryptedKey = provider.EncryptColumnEncryptionKey(masterKeyPath, "RSA_OAEP", randomBytes);
var encryptedKeySerialized = "0x" + BitConverter.ToString(encryptedKey).Replace("-", "");
Run Code Online (Sandbox Code Playgroud)
如果您想了解更多信息,我建议您查看这篇文章: https: //blogs.msdn.microsoft.com/sqlsecurity/2015/09/25/creating-custom-key-store-providers-for-始终加密的azure-key-vault-示例/