可以用与SSMS不同的方式生成ENCRYPTED_VALUE吗?我喜欢启用"始终加密"所选列的功能,但我想知道如何通过未知密钥加密数据。
在我看来,总是应该有办法解密数据而不连接到azure密钥保险库(就像我理解加密数据一样,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)
);
答案 0 :(得分:0)
与谷歌搜索会话后,我发现了如何做到这一点。以下是生成此值的示例代码(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("-", "");
如果你想了解更多相关信息,我建议大家看一下这篇文章: https://blogs.msdn.microsoft.com/sqlsecurity/2015/09/25/creating-custom-key-store-providers-for-always-encrypted-azure-key-vault-example/