微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用Powershell将数据插入“始终加密”的Azure SQL DB表中

如何解决使用Powershell将数据插入“始终加密”的Azure SQL DB表中

我有一个带有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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?