如何在SQL Server中为CEK生成ENCRYPTED_VALUE始终加密

时间:2018-04-04 18:45:52

标签: sql-server encryption azure-sql-database azure-keyvault always-encrypted

可以用与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)
); 

1 个答案:

答案 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/