使用 SQL Server 导入和导出向导将数据迁移到使用 Always Encrypted 的列中或从中迁移数据

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例

SQL Server 导入和导出向导是一种使你可以将数据从源复制到目标的工具。 本文档介绍在源和/或目标是包含使用 Always Encrypted 保护的列的 SQL Server 数据库时,如何使用 SQL Server 导入和导出向导。

迁移方案

通过 SQL Server 导入和导出向导,可以实现以下方案以便在加密列之间迁移数据。

在迁移时加密纯文本数据

如果数据源包含纯文本数据,并且目标是包含加密列的 SQL Server 数据库,则可以使用 SQL Server 导入和导出向导从源检索纯文本数据,对其进行加密,然后将加密数据(已加密文本)复制到目标数据库中的加密列。 对于此迁移方案,数据源可以是 SQL Server 导入和导出向导支持的任何数据存储。 例如,文件、SQL Server 数据库或其他数据库系统中的数据库。

若要确保 SQL Server 导入和导出向导可以加密数据,需要为目标数据库连接启用 Always Encrypted,并且需要有权访问用于保护目标数据库列中数据的密钥。 有关详细信息,请参阅为数据库连接启用和禁用 Always Encrypted在迁移过程中加密或解密数据的权限

在迁移时解密加密数据

如果要迁移存储在 SQL Server 数据库的加密数据库列中的数据,则可以配置 SQL Server 导入和导出向导,以便解密数据并将解密(纯文本)数据复制到目标(可以是 SQL Server 导入和导出向导支持的任何数据存储,例如文件、SQL Server 数据库或其他数据库系统中的数据库)。

若要确保 SQL Server 导入和导出向导可以解密数据,需要为源数据库连接启用 Always Encrypted,并且需要有权访问用于保护源数据库列中数据的密钥。 有关详细信息,请参阅为数据库连接启用和禁用 Always Encrypted在迁移过程中加密或解密数据的权限

在迁移时重新加密数据

如果要将数据从源 SQL Server 数据库中的加密列复制到相同或其他 SQL Server 数据库中的加密列,则可以配置 SQL Server 导入和导出向导,以便在从源检索数据之后解密数据,并在将数据插入目标数据库中的加密列之前重新加密数据。 如果目标列的架构(例如,列数据类型、加密类型和列加密密钥)与源列的架构不同,请使用此方法。

若要确保 SQL Server 导入和导出向导可以加密和解密数据,需要为源数据库连接和目标数据库连接启用 Always Encrypted,并且需要有权访问用于保护源和目标数据库列中数据的密钥。 有关详细信息,请参阅为数据库连接启用和禁用 Always Encrypted在迁移过程中加密或解密数据的权限

使数据在迁移过程中保持加密

如果要将数据从源 SQL Server 数据库中的加密列复制到相同或其他 SQL Server 数据库中的加密列,并且目标列使用与源列完全相同的架构(包括相同数据类型、加密类型和列加密密钥),则可以配置 SQL Server 导入和导出向导,以便从源列中检索已加密文本,并将加密数据(已加密文本)插入目标 SQL Server 数据库中的加密列。

对于此方案,可以使用支持 SQL Server 的任何数据提供程序连接到源或目标 SQL Server 数据库。 如果您正在使用支持 Always Encrypted 的提供程序连接到目标数据库,则需要确保数据库连接已禁用 Always Encrypted。 有关详细信息,请参阅为数据库连接启用和禁用 Always Encrypted

还需要确保 SQL Server 导入和导出向导用于连接目标数据库的数据库主体(用户)已配置为将 ALLOW_ENCRYPTED_VALUE_MODIFICATIONS 选项设置为 ON。 此选项会取消在大容量复制操作中,在服务器上进行的加密元数据检查,这使向导可以将加密数据大容量插入目标数据库,而无需解密数据。 有关详细信息,请参阅将加密数据批量加载到受 Always Encrypted 保护的列

为数据库连接启用和禁用 Always Encrypted

如果迁移方案需要 SQL Server 导入和导出向导能够加密和/或解密数据,则需要使用支持 Always Encrypted 的数据提供程序配置源 SQL Server 数据库连接和/或目标 SQL Server 数据库连接。 还需要为源和/或目标数据库连接启用 Always Encrypted。

如果不需要向导对此连接中的数据进行加密或解密,则可以为该连接使用任何数据提供程序。

SQL Server 导入和导出向导中的以下数据提供程序支持 Always Encrypted。

在迁移过程中加密或解密数据的权限

若要加密或解密存储在 SQL Server 源数据库或目标数据库中的数据,需要在源数据库中具有 VIEWANY COLUMN MASTER KEY DEFINITIONVIEWANY COLUMN ENCRYPTION KEY DEFINITION 权限。 还需要具有密钥存储权限,才能访问和使用您的列主密钥。 有关密钥管理操作所需的密钥存储权限的详细信息,请参阅创建并存储 Always Encrypted 的列主密钥,查找与密钥存储相关的部分。

后续步骤

另请参阅