Я реализовал функцию TimeTriggerC # Azure для запуска процедуры хранения для вставки таблицы, зашифрованной с использованием шифрования столбца (Always Encrypted, AzureKey Vault As Provider)
Область блокировки для меня заключается в том, что моя функция успешно выполнялась один раз и многократно повторяла ошибку. Так что путь успеха я получаю как редкий случай
Ошибка, с которой я столкнулся, это
mscorlib: исключение было выброшено целью вызова. System.Data: поставщики хранилища ключей не могут быть установлены более одного раза.
Я провел небольшое расследование по этому поводу. Это происходит в строке
SqlConnection.RegisterColumnEncryptionKeyStoreProviders(providers);
В функции
static void InitializeAzureKeyVaultProvider()
{
string clientId = ConfigurationManager.AppSettings["AuthClientId"];
string clientSecret = ConfigurationManager.AppSettings["AuthClientSecret"];
_clientCredential = new ClientCredential(clientId, clientSecret);
// Direct the provider to the authentication delegate
SqlColumnEncryptionAzureKeyVaultProvider azureKeyVaultProvider = new SqlColumnEncryptionAzureKeyVaultProvider(GetToken);
Dictionary<string, SqlColumnEncryptionKeyStoreProvider> providers = new Dictionary<string, SqlColumnEncryptionKeyStoreProvider>();
providers.Add(SqlColumnEncryptionAzureKeyVaultProvider.ProviderName, azureKeyVaultProvider);
// register the provider with ADO.net
SqlConnection.RegisterColumnEncryptionKeyStoreProviders(providers);
}
Когда я попытался глубже изучить основную причину ошибки, это было похоже на
Исключение было создано целью вызова. ---> System.InvalidOperationException: поставщики хранилища ключей не могут быть установлены более одного раза. в System.Data.SqlClient.SqlConnection.RegisterColumnEncryptionKeyStoreProviders (IDictionary`2 customProviders)
Как я уже упоминал выше, я использовал Azure Key Vault в качестве поставщика хранилища ключей. Я правильно зарегистрировал свое хранилище ключей в AD и добавил зарегистрированное приложение в свое хранилище ключей (политики доступа).
Почему я сталкиваюсь с таким ненормальным поведением, как одноразовый успех и второй раз неудача?
Цените ваш ответ,
Джайендран
InitializeAzureKeyVaultProvider()
метод? Судя по сообщению об ошибке, вы делаете это более одного раза. - person Max   schedule 28.07.2017