Моя команда и я пытаемся расшифровать значения из базы данных (Azure SQL), для которой включено шифрование на уровне столбцов; с сертификатами, хранящимися в хранилище ключей.
Ожидаемый результат:
var someLinqQuery = _contex.Users.First();
someLinqQuery.SSN = "000-00-0000";
Фактический результат:
var someLinqQuery = _context.Users.First();
someLinqQuery.SSN = "the var binary (encrypted) version of the ssn";
FWIW, это прекрасно работает с raw sql. Но мы бы хотели, чтобы это делалось не так и шифровало больше данных.
Также у нас есть код ключа azure:
//Key Vault Code Below
private static ClientCredential _clientCredential;
public static void InitializeAzureKeyVaultProvider()
{
if (!isActivated)
{
_clientCredential = new ClientCredential(_applicationId, _clientKey);
SqlColumnEncryptionAzureKeyVaultProvider azureKeyVaultProvider = new SqlColumnEncryptionAzureKeyVaultProvider(GetToken);
Dictionary<string, SqlColumnEncryptionKeyStoreProvider> providers = new Dictionary<string, SqlColumnEncryptionKeyStoreProvider>
{
{ SqlColumnEncryptionAzureKeyVaultProvider.ProviderName, azureKeyVaultProvider }
};
SqlConnection.RegisterColumnEncryptionKeyStoreProviders(providers);
isActivated = true;
}
}
public static async Task<string> GetToken(string authority, string resource, string scope)
{
var authContext = new AuthenticationContext(authority);
AuthenticationResult result = await authContext.AcquireTokenAsync(resource, _clientCredential);
if (result == null)
{
throw new InvalidOperationException("Failed to obtain the access token");
}
AccessToken = result.AccessToken;
return result.AccessToken;
}
Он загружается в класс запуска. Я также переместил код в другие места приложения с такими же результатами.
У меня такой вопрос, на. net core 2.1.x и EF core 2.1.x это возможно с помощью LINQ ? Нужно ли обновляться?