本页面介绍了如何使用透明数据加密 (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