问题描述
我有一个带有Always encrypted table and keys stored in Azure KeyVault的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();
运行此代码时,即使我在天蓝色的密钥保管库级别对服务主体指定了正确的加密访问权限(展开,包装,验证,签名),也遇到了以下错误
使用“ 0”参数调用“ ExecuteNonQuery”的异常:“失败 解密列加密密钥。无效的密钥存储提供程序名称: 'AZURE_KEY_VAULT'。密钥库提供者名称必须表示 系统密钥库提供者或注册的自定义密钥库提供者。 有效的系统密钥库提供程序名称为:“ MSsql_CERTIFICATE_STORE”, 'MSsql_CNG_STORE','MSsql_CSP_PROVIDER'。有效(当前注册) 自定义密钥存储提供程序名称为:。请验证密钥存储区 数据库中列主键定义中的提供程序信息, 并确认您的应用程序中使用的所有自定义密钥存储提供程序都是 正确注册。”
here所描述的方式对我不起作用,可能是因为我正在使用Key Vault存储密钥。
要解决此错误,需要执行一个步骤from C# to use InitializeAzureKeyVaultProvider,但是由于我正尝试仅通过Powershell和sqlServer PS模块实现此目标,因此有什么办法可以仅使用Powershell实现此目标吗?不用C#的方式解释here
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)