你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

在由 Azure Arc 启用的 SQL 托管实例中使用透明数据加密来加密数据库

本文介绍如何在由 Azure Arc 启用的 SQL 托管实例中创建的数据库上启用透明数据加密。在本文中,术语“托管实例”指由 Azure Arc 启用的 SQL 托管实例的部署

先决条件

在继续阅读本文之前,必须创建由 Azure Arc 启用的 SQL 托管实例并连接到该实例。

在托管实例中的数据库上启用透明数据加密

在托管实例中启用透明数据加密遵循与本地 SQL Server 相同的步骤。 按照 SQL Server 透明数据加密指南中所述的步骤操作。

创建所需的凭据后,请备份任何新创建的凭据。

备份透明数据加密凭据

从托管实例备份凭据时,凭据将存储在容器中。 若要将凭据存储在永久性卷上,请在容器中指定装载路径。 例如 var/opt/mssql/data。 以下示例从托管实例备份证书:

注意

如果从 Windows 运行 kubectl cp 命令,则使用绝对 Windows 路径时,该命令可能会失败。 使用相对路径或下面指定的命令。

  1. 将证书从容器备份到 /var/opt/mssql/data

    USE master;
    GO
    
    BACKUP CERTIFICATE <cert-name> TO FILE = '<cert-path>'
    WITH PRIVATE KEY ( FILE = '<private-key-path>',
    ENCRYPTION BY PASSWORD = '<UseStrongPasswordHere>');
    

    示例:

    USE master;
    GO
    
    BACKUP CERTIFICATE MyServerCert TO FILE = '/var/opt/mssql/data/servercert.crt'
    WITH PRIVATE KEY ( FILE = '/var/opt/mssql/data/servercert.key',
    ENCRYPTION BY PASSWORD = '<UseStrongPasswordHere>');
    
  2. 将证书从容器复制到文件系统。

kubectl exec -n <namespace> -c arc-sqlmi <pod-name> -- cat <pod-certificate-path> > <local-certificate-path>

示例:

kubectl exec -n arc-ns -c arc-sqlmi sql-0 -- cat /var/opt/mssql/data/servercert.crt > $HOME\sqlcerts\servercert.crt
  1. 将私钥从容器复制到文件系统。
 kubectl exec -n <namespace> -c arc-sqlmi <pod-name> -- cat <pod-private-key-path> > <local-private-key-path>

示例:

kubectl exec -n arc-ns -c arc-sqlmi sql-0 -- cat /var/opt/mssql/data/servercert.key > $HOME\sqlcerts\servercert.key
  1. 从容器中删除证书和私钥。

    kubectl exec -it --namespace <namespace> --container arc-sqlmi <pod-name> -- bash -c "rm <certificate-path> <private-key-path>
    

    示例:

    kubectl exec -it --namespace arc-ns --container arc-sqlmi sql-0 -- bash -c "rm /var/opt/mssql/data/servercert.crt /var/opt/mssql/data/servercert.key"
    

将透明数据加密凭据还原到托管实例

与上述操作类似,还原凭据的方法是先将凭据复制到容器中,然后运行相应的 T-SQL。

注意

如果从 Windows 运行 kubectl cp 命令,则使用绝对 Windows 路径时,该命令可能会失败。 使用相对路径或下面指定的命令。

  1. 将证书从文件系统复制到容器。
type <local-certificate-path> | kubectl exec -i -n <namespace> -c arc-sqlmi <pod-name> -- tee <pod-certificate-path>

示例:

type $HOME\sqlcerts\servercert.crt | kubectl exec -i -n arc-ns -c arc-sqlmi sql-0 -- tee /var/opt/mssql/data/servercert.crt
  1. 将私钥从文件系统复制到容器。
type <local-private-key-path> | kubectl exec -i -n <namespace> -c arc-sqlmi <pod-name> -- tee <pod-private-key-path>

示例:

type $HOME\sqlcerts\servercert.key | kubectl exec -i -n arc-ns -c arc-sqlmi sql-0 -- tee /var/opt/mssql/data/servercert.key
  1. 使用文件路径从 /var/opt/mssql/data 创建证书。

    USE master;
    GO
    
    CREATE CERTIFICATE <certicate-name>
    FROM FILE = '<certificate-path>'
    WITH PRIVATE KEY ( FILE = '<private-key-path>',
        DECRYPTION BY PASSWORD = '<UseStrongPasswordHere>' );
    

    示例:

    USE master;
    GO
    
    CREATE CERTIFICATE MyServerCertRestored
    FROM FILE = '/var/opt/mssql/data/servercert.crt'
    WITH PRIVATE KEY ( FILE = '/var/opt/mssql/data/servercert.key',
        DECRYPTION BY PASSWORD = '<UseStrongPasswordHere>' );
    
  2. 从容器中删除证书和私钥。

    kubectl exec -it --namespace <namespace> --container arc-sqlmi <pod-name> -- bash -c "rm <certificate-path> <private-key-path>
    

    示例:

    kubectl exec -it --namespace arc-ns --container arc-sqlmi sql-0 -- bash -c "rm /var/opt/mssql/data/servercert.crt /var/opt/mssql/data/servercert.key"
    

透明数据加密