使用参考方法访问 azure 函数上始终加密的列

问题描述 投票:0回答:0

我们有在 .net core 3.1 上运行的 azure 函数,我们有在 .net framework 4.7.2 上运行的单独项目的方法,我们正在尝试使用从 azure 函数调用的 .net framework 4.7.2 中的方法来访问具有使用 Always Encrypted 的加密列的数据库。当尝试创建 Microsoft.Data.SqlClient.SqlConnection 的新实例时,我们遇到异常:

System.TypeInitializationException: 'The type initializer for 'Microsoft.Data.SqlClient.SqlConnection' threw an exception.' "MissingMethodException: Method not found: 'System.Security.CodeAccessPermission System.Data.Common.DbProviderFactory.CreatePermission(System.Security.Permissions.PermissionState)'.

连接字符串包含“Column Encryption Setting=enabled”

.net framework 4.7.2 ProjectA中的方法示例

public static string MethodA()
{
    string ssn = "";
    try
    {
        string sql = @" SELECT TOP 1 SSN FROM DBO.TESTAETABLE";
        List<SqlParameter> parameters = new List<SqlParameter>();
        using (Microsoft.Data.SqlClient.SqlDataReader reader = DBManager.ExecuteReaderMS(sql, parameters.ToArray()))
        {
            while (reader.Read())
            ssn = Convert.ToString(reader["SSN"]);
        }
    }
    catch (Exception e)
    {
        string error = e.ToString();
    }
    return ssn;
}

Azure 函数示例

[FunctionName("TestFunction")]
public static Task Run([ServiceBusTrigger("testfunction", Connection = "testconnection")]Message myQueueItem, ILogger log)
{
    try
    {
        string aType = Convert.ToString(myQueueItem.UserProperties["type"]);
        string aResourceName = Convert.ToString(myQueueItem.UserProperties["name"]);
        int aResult = 0;
        string aMessage = null;
        if (aType == "AKVTEST") 
        {
            string anSSN = ProjectA.ClassA.MethodA();
            return Task.CompletedTask;
        }

        log.LogInformation($"C# ServiceBus queue trigger function processed message: {myQueueItem.Body} for type: {aType}");
        return null;
    }
    catch (Exception Ex)
    {
        log.LogInformation($"C# ServiceBus queue trigger function EXCEPTION: {Ex.ToString()}");
        return null;
    }
}

试图将 System.Data.SqlClient 引用更改为 Microsoft.Data.SqlClient(包版本 5.1),我们收到了上述异常。

在此更改之前,在使用 System.Data.SqlClient 时,我们遇到以下异常:

System.ArgumentException: 'Keyword not supported: 'column encryption setting'.'
c# entity-framework .net-core azure-functions always-encrypted
© www.soinside.com 2019 - 2024. All rights reserved.