SQL Server-使用bcp.exe实用工具导出加密数据(已启用列加密设置)

时间:2019-04-03 11:05:51

标签: sql-server database encryption export

我需要将带有加密列的表导出到文本文件中。加密的数据应以纯文本格式导出,而不是加密。

大家好。

我需要对SQL Server中的加密列执行一些聚合操作(数据通过内置的SQL Server 2017 Always Encrypted功能进行加密)。我找到了一种方法-将表内容导出到某些文本文件中,然后将该文本文件导入到某些表中。它将允许对数据进行任何操作,因为它不再被加密。

当我使用 [将结果另存为...] 选项从SSMS手动导出数据,然后使用 BULK INSERT 命令导入文件时,此方法非常有效。

下一步,我需要使用存储过程自动执行此操作。我发现可以通过调用 bcp.exe 实用程序的 XP_CMDSHELL 命令完成此操作的信息。问题就从这里开始。

此实用程序由运行SQL Server进程的用户运行。我已经为该用户安装了安全证书,并且希望通过bcp.exe实用程序导出的数据将被解密。但不幸的是,不是。

有关运行SQL Server进程的用户的一些信息:

1);它具有sysadmin服务器角色;

2)它已安装用于访问加密数据的安全.pfx证书

3)当我以SQL Server用户身份登录时,使用附加参数 Column Encryption Setting = enabled 连接到数据库,然后从带有加密列的表中选择数据-我看到了解密的数据。

我正在使用的命令:

DECLARE @bcp_cmd4 VARCHAR(1000);

DECLARE @exe_path4 VARCHAR(200) =
' cd C:\Program Files\Microsoft SQL Server\110\Tools\Binn\ & ';

SET @bcp_cmd4 =  @exe_path4 + 
'bcp.exe "SELECT * FROM [Table]" queryout ' +
' "C:\Dir\Data.csv" -T -c -t, -r \n';

PRINT @bcp_cmd4;

EXEC MASTER..XP_CMDSHELL @bcp_cmd4;

此命令导出表数据,但是加密的列保持加密状态,因此我无法导入它并对其进行进一步的操作。

有人可以协助解决吗?

0 个答案:

没有答案