问题描述
尝试使用 column encryption
启用 azure key vault
时出现以下错误
无法从“方法组”转换为“TokenCredential”
我正在使用 .Net Core 3.1
主类
static void Main(string[] args)
{
InitializeAzurekeyvaultProvider();
}
private static void InitializeAzurekeyvaultProvider()
{
_clientCredential = new ClientCredential(clientId,clientSecret);
sqlColumnEncryptionAzurekeyvaultProvider azurekeyvaultProvider =
new sqlColumnEncryptionAzurekeyvaultProvider(GetToken); // error comes here
Dictionary<string,sqlColumnEncryptionKeyStoreProvider> providers =
new Dictionary<string,sqlColumnEncryptionKeyStoreProvider>();
providers.Add(sqlColumnEncryptionAzurekeyvaultProvider.ProviderName,azurekeyvaultProvider);
sqlConnection.RegisterColumnEncryptionKeyStoreProviders(providers);
}
private 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");
return result.Accesstoken;
}
我正在尝试使用 key vault
解密 sql Server
中的加密列值,我指的是此文档:https://docs.microsoft.com/en-us/azure/azure-sql/database/always-encrypted-azure-key-vault-configure?tabs=azure-powershell
解决方法
正如 DavidG 和 MindSwipe 所解释的,问题通过将以下 nuget 包降级到 v1
Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider