通过 SQL Server 导入和导出向导在使用 Always Encrypted 的列之间迁移数据
适用于: SQL Server Azure 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 导入和导出向导用于连接到目标数据库的数据库主体(用户)使用设置为 ON
的 ALLOW_ENCRYPTED_VALUE_MODIFICATIONS
选项进行配置。 此选项会取消在大容量复制操作中,在服务器上进行的加密元数据检查,这使向导可以将加密数据大容量插入目标数据库,而无需解密数据。 有关详细信息,请参阅将加密数据大容量加载到受 Always Encrypted 保护的列。
为数据库连接启用和禁用 Always Encrypted
如果迁移方案需要 SQL Server 导入和导出向导能够加密和/或解密数据,则需要使用支持 Always Encrypted 的数据提供程序配置源 SQL Server 数据库连接和/或目标 SQL Server 数据库连接。 还需要为源和/或目标数据库连接启用 Always Encrypted。
如果不需要向导在连接上加密或解密数据,则可以使用任何数据提供程序进行连接。
SQL Server 导入和导出向导中的以下数据提供程序支持 Always Encrypted。
- 适用于 SQL Server 的 .NET Framework 数据提供程序
- 请确保运行向导的计算机使用 .NET Framework 4.6.1 或更高版本。
- 若要为连接启用 Always Encrypted,请在连接属性中将
Column Encryption Setting
设置为Enabled
。 若要禁用 Always Encrypted,请将Column Encryption Setting
设置为Disabled
。 有关详细信息,请参阅使用用于 SQL Server 的 .NET Framework 数据提供程序连接到 SQL Server 和为应用程序查询启用 Always Encrypted。
- 用于 ODBC 的 .NET Framework 数据提供程序。
- 安装 Microsoft ODBC 驱动程序 13.1 或更高版本。
- 若要为连接启用 Always Encrypted,请在连接属性中将
Column Encryption
设置为Enabled
。 若要禁用 Always Encrypted,请将Column Encryption
设置为Disabled
。 有关详细信息,请参阅使用用于 SQL Server 的 ODBC 驱动程序连接到 SQL Server 和在 ODBC 应用程序中启用 Always Encrypted。
- 若要为连接启用 Always Encrypted,请在连接属性中将
- 安装 Microsoft ODBC 驱动程序 13.1 或更高版本。
在迁移过程中加密或解密数据的权限
若要加密或解密 SQL Server 源或目标数据库中存储的数据,需要源数据库中的“查看任意列主密钥定义”和“查看任意列加密密钥定义”权限。 还需要密钥存储权限来访问和使用列主密钥。 有关密钥管理操作所需的密钥存储权限的详细信息,请参阅创建并存储 Always Encrypted 的列主密钥,查找与密钥存储相关的部分。