Всегда шифрование с использованием функции Azure. Попытка избежать повторной инициализации через статические переменные - PullRequest
0 голосов
/ 18 апреля 2019

Я использую функцию Azure для хранения зашифрованных данных. Я успешно сделал это, используя код ниже; однако попытка инициализации поставщиков хранилища ключей более одного раза приводит к ошибке Key store providers cannot be set more than once. Чтобы избежать этого, я установил статическую переменную, чтобы отслеживать, была ли она инициализирована или нет. Это прекрасно работает в течение коротких периодов времени. Тем не менее, каждый раз, когда я пытаюсь в первый раз на следующий день, функция взрывается с той же ошибкой. Что меня интересует, так это то, что если статическая переменная isInitialized теряет свое значение по истечении некоторого периода времени, не должна ли переменная _clientCredential также быть сброшена, что означает, что попытка установить провайдеров снова - это нормально?

private static ClientCredential _clientCredential;
private static Boolean isInitialized;

if (isInitialized == false) {
    isInitialized = true;
    string clientId = ConfigurationManager.ConnectionStrings["blah"].ConnectionString;
    string clientSecret = ConfigurationManager.ConnectionStrings["blah"].ConnectionString;
    _clientCredential = new ClientCredential(clientId, clientSecret);

    SqlColumnEncryptionAzureKeyVaultProvider azureKeyVaultProvider = new SqlColumnEncryptionAzureKeyVaultProvider(GetToken);

    Dictionary<string, SqlColumnEncryptionKeyStoreProvider> providers = new Dictionary<string, SqlColumnEncryptionKeyStoreProvider>();
    providers.Add(SqlColumnEncryptionAzureKeyVaultProvider.ProviderName, azureKeyVaultProvider);

    SqlConnection.RegisterColumnEncryptionKeyStoreProviders(providers);
}

Кажется, одна из переменных сбрасывается, а другая нет. Я понимаю, что существуют также проблемы безопасности потоков при использовании функций Azure. Есть ли другой способ проверить, все ли инициализировано, чтобы полностью избежать проблем с безопасностью потоков? Или мне как-то нужно избегать проблем безопасности потоков и состояния сеанса самостоятельно?

Я видел еще один пост на эту тему, но без реального объяснения того, как решать проблемы, описанные выше.

1 Ответ

1 голос
/ 19 апреля 2019

Статические члены совместно используются различными вызовами одной и той же функции, что может привести к условиям гонки.Используйте статические конструкторы для инициализации общих ресурсов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...