Я использую функцию 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. Есть ли другой способ проверить, все ли инициализировано, чтобы полностью избежать проблем с безопасностью потоков? Или мне как-то нужно избегать проблем безопасности потоков и состояния сеанса самостоятельно?
Я видел еще один пост на эту тему, но без реального объяснения того, как решать проблемы, описанные выше.