【发布时间】:2017-07-28 08:15:50
【问题描述】:
我已经实现了一个 TimeTriggerC# Azure 函数来运行一个存储过程来插入一个使用列加密(始终加密,AzureKey Vault 作为提供者)加密的表
对我来说,阻塞区域是我的函数 1 次成功运行,但又多次出错。所以我得到了成功的路径作为一个罕见的案例
我遇到的错误是
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 正确注册了我的 Keyvault,并将注册的应用程序添加到我的密钥库(访问策略)。
为什么我会遇到这种异常行为,比如一次成功,一次失败?
感谢您的回复,
贾延德兰
【问题讨论】:
-
你在哪里调用你的
InitializeAzureKeyVaultProvider()方法?从错误消息中可以看出,您不止一次这样做了。
标签: c# azure azure-functions azure-keyvault always-encrypted