Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将数据插入";“始终加密”;使用powershell的Azure SQL DB表_C#_Sql Server_Powershell_Always Encrypted - Fatal编程技术网

C# 将数据插入";“始终加密”;使用powershell的Azure SQL DB表

C# 将数据插入";“始终加密”;使用powershell的Azure SQL DB表,c#,sql-server,powershell,always-encrypted,C#,Sql Server,Powershell,Always Encrypted,我有一个Azure SQL数据库。我希望使用Powershell将数据插入“始终加密”表 我知道Invoke-sqlcmd不支持,我正在使用SqlCommand.ExecuteNonQuery方法()实现同样的功能 $connStr = "Server={0};Database={1};User ID={2};Password={3};Column Encryption Setting=enabled;" -f $SqlDBServerInstance, $SqlCo

我有一个Azure SQL数据库。我希望使用Powershell将数据插入“始终加密”表

我知道Invoke-sqlcmd不支持,我正在使用SqlCommand.ExecuteNonQuery方法()实现同样的功能

    $connStr = "Server={0};Database={1};User ID={2};Password={3};Column Encryption Setting=enabled;" -f $SqlDBServerInstance, $SqlConnectionInfo.DatabaseName, $SqlConnectionInfo.UserName, $SqlConnectionInfo.Password
    
    $sqlConn = New-Object System.Data.SqlClient.SqlConnection
    $sqlConn.ConnectionString = $connStr
    $sqlConn.Open()
    $sqlcmd = New-Object System.Data.SqlClient.SqlCommand
    $sqlcmd.Connection = $sqlConn    
    $sqlcmd.CommandText = "INSERT INTO dbo.SecureTable (Column1) VALUES (@Param1)"
    $sqlcmd.Parameters.Add((New-Object Data.SqlClient.SqlParameter("@Param1", [Data.SQLDBType]::VarChar,50)))
    $sqlcmd.Parameters["@Param1"].Value = "$Param1"
    
    $sqlcmd.ExecuteNonQuery();
当我运行这段代码时,即使我在azure的密钥库级别上有权对服务主体进行加密访问(展开、包装、验证、签名),我也会得到下面的错误

使用“0”参数调用“ExecuteOnQuery”时出现异常:“未能 解密列加密密钥。密钥存储提供程序名称无效: “AZURE密钥库”。密钥库提供程序名称必须表示 系统密钥存储提供程序或已注册的自定义密钥存储提供程序。 有效的系统密钥存储提供程序名称为:“MSSQL\u证书\u存储”, “MSSQL\U CNG\U存储”、“MSSQL\U CSP\U提供程序”。有效(当前注册) 自定义密钥存储提供程序名称为:。请验证密钥存储 数据库中列主密钥定义中的提供程序信息, 并验证应用程序中使用的所有自定义密钥存储提供程序 正确登记。”

所述方法不适用于我,可能是因为我正在使用密钥库存储密钥


要解决此错误,需要一个步骤,但由于我仅尝试从Powershell和SqlServer PS模块实现此目的,是否有任何方法可以仅使用Powershell实现此目的?如果不按照C#way explained

的方法进行操作,则不需要在代码中添加密钥。始终可以使用浏览器中的Internet选项加载密钥。只做了一次。对不起@jdweng,我没有完全理解。浏览器中的internet选项?适用于IE:工具:internet选项:内容。密钥在证书中。我想jdweng指的是这篇文章,它是你的Azure密钥库链接的兄弟。我相信向导正在您的个人证书存储中创建CMK和CEK作为X509.2证书,您也可以通过Internet选项中的安全设置进行操作,但与Azure Key Vault不同。好的,谢谢@AlwaysLearning,但我们使用KeyVault来管理密钥,而不是Windows证书存储,因此,我相信我们需要一些不同的解决方案来初始化eAzureKeyVault提供程序,并将数据插入加密表中。您不需要在代码中添加密钥。始终可以使用浏览器中的Internet选项加载密钥。只做了一次。对不起@jdweng,我没有完全理解。浏览器中的internet选项?适用于IE:工具:internet选项:内容。密钥在证书中。我想jdweng指的是这篇文章,它是你的Azure密钥库链接的兄弟。我相信向导正在您的个人证书存储中创建CMK和CEK作为X509.2证书,您也可以通过Internet选项中的安全设置进行操作,但与Azure Key Vault不同。好的,谢谢@AlwaysLearning,但我们使用KeyVault来管理密钥,而不是Windows证书存储,所以我相信我们需要一些不同的解决方案来初始化eAzureKeyVault提供程序并将数据插入加密表中