使用透明数据加密 (TDE)

本页面介绍了如何使用透明数据加密 (TDE)

以下部分介绍了如何管理 TDE 证书。

准备工作

如需导入或导出 TDE 证书,您必须拥有 cloudsql.instances.manageEncryption Identity and Access Management 权限,该权限包含在 cloudsql.admin 角色中。如需了解详情,请参阅 Cloud SQL 角色

GRANT VIEW ANY DEFINITION TO other_login AS CustomerDbRootRole

导入外部 TDE 证书

控制台

您无法使用 Google Cloud 控制台导入 TDE 证书。

gcloud

使用以下命令从 Cloud Storage 存储分区导入证书: gcloud sql import

    gcloud sql import tde INSTANCE_NAME \
    --certificate CERTIFICATE_NAME \
    --cert-path=gs://BUCKET_NAME/CERTIFICATE_NAME \
    --pvk-path=gs://BUCKET_NAME/KEY_NAME \
    --prompt-for-pvk-password \
    --pvk-password CERTIFICATE_PASSWORD
    

进行以下替换:

  • INSTANCE_NAME:您要将 TDE 证书导入到的 Cloud SQL 实例的名称。
  • CERTIFICATE_NAME:您要导入的加密证书的名称。
  • BUCKET_NAME:您要导入的 TDE 证书所在的 Cloud Storage 存储分区的名称。
  • KEY_NAME:与 Cloud Storage 存储分区关联的加密密钥的名称。
  • CERTIFICATE_PASSWORD:证书密码。

REST v1

如需导入 TDE 证书,请使用 instances.import 方法并指定以下属性:

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:要导入加密证书的项目的名称。
  • INSTANCE_NAME:您要将加密证书导入到的 Cloud SQL 实例的名称。
  • TDE_CERTIFICATE_NAME:您要在导入后使用的加密证书的名称。
  • CERTIFICATE_NAME:要导入的加密证书的名称。
  • BUCKET_NAME:要导入的加密证书所在的 Cloud Storage 存储分区的名称。
  • KEY_NAME:与 Cloud Storage 存储分区关联的加密密钥的名称。
  • CERTIFICATE_PASSWORD:证书密码。

HTTP 方法和网址:

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_NAME/instances/INSTANCE_NAME/import

请求 JSON 正文:


{
  "importContext":
    {
        "fileType": "TDE",
        "tdeImportOptions":
          {
            "name": "TDE_CERTIFICATE_NAME",
            "certificatePath": "gs://BUCKET_NAME/CERTIFICATE_NAME",
            "privateKeyPath": "gs://BUCKET_NAME/KEY_NAME",
            "privateKeyPassword": "CERTIFICATE_PASSWORD"
          }
    }
}



如需发送您的请求,请展开以下选项之一:

您应该收到类似以下内容的 JSON 响应:

REST v1beta4

如需导入 TDE 证书,请使用 instances.import 方法并指定以下属性:

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:要导入加密证书的项目的名称。
  • INSTANCE_NAME:您要将加密证书导入到的 Cloud SQL 实例的名称。
  • TDE_CERTIFICATE_NAME:您要在导入后使用的加密证书的名称。
  • CERTIFICATE_NAME:要导入的加密证书的名称。
  • BUCKET_NAME:要导入的加密证书所在的 Cloud Storage 存储分区的名称。
  • KEY_NAME:与 Cloud Storage 存储分区关联的加密密钥的名称。
  • CERTIFICATE_PASSWORD:证书密码。

HTTP 方法和网址:

POST https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_NAME/instances/INSTANCE_NAME/import

请求 JSON 正文:


{
  "importContext":
    {
        "fileType": "TDE",
        "tdeImportOptions":
          {
            "name": "TDE_CERTIFICATE_NAME",
            "certificatePath": "gs://BUCKET_NAME/CERTIFICATE_NAME",
            "privateKeyPath": "gs://BUCKET_NAME/KEY_NAME",
            "privateKeyPassword": "CERTIFICATE_PASSWORD"
          }
    }
}



如需发送您的请求,请展开以下选项之一:

您应该收到类似以下内容的 JSON 响应:

每个导入的 TDE 证书都会分配一个唯一名称,格式如下:

  gcloud_tde_user_CERTIFICATE_NAME_GENERATED_GUID

如果实例上启用了时间点恢复 (PITR),则导入的 TDE 证书可能需要几分钟才能生效。

轮替 TDE 证书

  • 您可以使用 msdb.dbo.gcloudsql_rotate_tde_certificate 存储过程轮换导入的 TDE 证书。该过程必须由 sqlserver 用户或 sqlserver 用户已授予权限的用户调用,调用方式类似于以下示例:

        EXEC msdb.dbo.gcloudsql_rotate_tde_certificate TDE_CERTIFICATE_NAME
        

删除 TDE 证书

  • 您最多可以导入 10 个用户 TDE 证书。如果您需要导入更多证书,请使用 msdb.dbo.gcloudsql_drop_tde_user_certificate 存储过程删除所有不必要的 TDE 证书。该过程必须由 sqlserver 用户或 sqlserver 用户已授予权限的用户调用,调用方式类似于以下示例:

        EXEC gcloudsql_drop_tde_user_certificate TDE_CERTIFICATE_NAME
        
  • 您无法删除由 Cloud SQL 管理的证书。

  • 您无法删除正在使用的证书。

导出 TDE 证书

您必须指定完整的 TDE 证书名称(包括前缀和后缀)才能导出。您可以通过查询 sys.certificates 视图中的名称列来查找完整的 TDE 加密证书名称:

    SELECT name FROM sys.certificates
  

控制台

您无法使用 Google Cloud 控制台导出 TDE 证书。

gcloud

使用以下 gcloud sql export 将 TDE 证书导出到 Cloud Storage 存储分区:

          gcloud sql export tde INSTANCE_NAME \
          --certificate CERTIFICATE_NAME \
          --cert-path=gs://BUCKET_NAME/CERTIFICATE_NAME \
          --pvk-path=gs://BUCKET_NAME/KEY_NAME \
          --prompt-for-pvk-password \
          --pvk-password CERTIFICATE_PASSWORD
        

进行以下替换:

  • INSTANCE_NAME:您要从中导出 TDE 证书的 Cloud SQL 实例的名称。
  • CERTIFICATE_NAME:要导出的加密证书的名称。
  • BUCKET_NAME:您要导出的 TDE 证书所在的 Cloud Storage 存储分区的名称。
  • KEY_NAME:与 Cloud Storage 存储分区关联的加密密钥的名称。
  • CERTIFICATE_PASSWORD:证书密码。

REST v1

如需导出 TDE 证书,请使用 instances.export 方法并指定以下属性:

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:要从中导出加密证书的项目的名称。
  • INSTANCE_NAME:您要从中导出加密证书的 Cloud SQL 实例的名称。
  • TDE_CERTIFICATE_NAME:您要在导出后使用的加密证书的名称。
  • CERTIFICATE_NAME:要导出的加密证书的名称。
  • BUCKET_NAME:您要导出的加密证书所在的 Cloud Storage 存储分区的名称。
  • KEY_NAME:与 Cloud Storage 存储分区关联的加密密钥的名称。
  • CERTIFICATE_PASSWORD:证书密码。

HTTP 方法和网址:

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_NAME/instances/INSTANCE_NAME/export

请求 JSON 正文:


{
  "exportContext":
    {
      "fileType": "TDE",
      "tdeExportOptions":
        {
          "name": "TDE_CERTIFICATE_NAME",
          "certificatePath": "gs://BUCKET_NAME/CERTIFICATE_NAME",
          "privateKeyPath": "gs://BUCKET_NAME/KEY_NAME",
          "privateKeyPassword": "CERTIFICATE_PASSWORD"
        }
    }
}


如需发送您的请求,请展开以下选项之一:

您应该收到类似以下内容的 JSON 响应:

REST v1beta4

如需导出 TDE 证书,请使用 instances.export 方法并指定以下属性:

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:要从中导出加密证书的项目的名称。
  • INSTANCE_NAME:您要从中导出加密证书的 Cloud SQL 实例的名称。
  • TDE_CERTIFICATE_NAME:您要在导出后使用的加密证书的名称。
  • CERTIFICATE_NAME:要导出的加密证书的名称。
  • BUCKET_NAME:您要导出的加密证书所在的 Cloud Storage 存储分区的名称。
  • KEY_NAME:与 Cloud Storage 存储分区关联的加密密钥的名称。
  • CERTIFICATE_PASSWORD:证书密码。

HTTP 方法和网址:

POST https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_NAME/instances/INSTANCE_NAME/export

请求 JSON 正文:


{
  "exportContext":
    {
      "fileType": "TDE",
      "tdeExportOptions":
        {
          "name": "TDE_CERTIFICATE_NAME",
          "certificatePath": "gs://BUCKET_NAME/CERTIFICATE_NAME",
          "privateKeyPath": "gs://BUCKET_NAME/KEY_NAME",
          "privateKeyPassword": "CERTIFICATE_PASSWORD"
        }
    }
}


如需发送您的请求,请展开以下选项之一:

您应该收到类似以下内容的 JSON 响应:

导入 TDE 加密的备份

导入 TDE 加密的备份时,如果源实例上已存在匹配的 TDE 证书,则可以直接导入加密的备份,而无需解密。您无需再次提供证书。

如果证书不在实例上,请在导入时使用 --keep-encrypted 标志。该标志具有以下优势:

  • 保留与实例关联的 TDE 证书。
  • 防止在导入期间解密备份。

如果您不使用 --keep-encrypted 标志,则导入的备份将被解密,并且 TDE 证书不会保存在服务器上。

如需了解详情,请参阅以下资源:

导出 TDE 加密备份

您可以按照导出未加密备份的方式导出 TDE 加密备份。用于加密备份的证书不包含在导出中。您必须单独导出。

如需了解详情,请参阅以下资源:

加密和解密数据库

您可以像使用 SQL Server 一样加密和解密实例。

最初,只有用户 root 登录信息(例如 sqlserver)可以访问 TDE 证书。如需向其他用户授予访问权限,请使用以下命令或类似命令:

    GRANT VIEW ANY DEFINITION TO CERTIFICATE_NAME AS CustomerDbRootRole
  

或者,您也可以向特定证书和数据库用户授予访问权限。

您可以使用以下命令或类似命令加密数据库:

    CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_256 ENCRYPTION BY SERVER CERTIFICATE CERTIFICATE_NAME
    ALTER DATABASE DATABASE_NAME SET ENCRYPTION ON
  

您可以使用以下命令或类似命令解密数据库:

    ALTER DATABASE DATABASE_NAME SET ENCRYPTION OFF
  

后续步骤