本頁面說明如何使用透明資料加密 (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
使用下列
gcloud sql import
從 Cloud Storage 值區匯入憑證:
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 bucket 的名稱。
- KEY_NAME:與 Cloud Storage bucket 相關聯的加密金鑰名稱。
- CERTIFICATE_PASSWORD:憑證密碼。
REST v1
如要匯入 TDE 憑證,請使用 instances.import
方法,並指定下列屬性:
使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:要匯入加密憑證的專案名稱。
- INSTANCE_NAME:您要將加密憑證匯入的 Cloud SQL 執行個體名稱。
- TDE_CERTIFICATE_NAME:匯入後要使用的加密憑證名稱。
- CERTIFICATE_NAME:要匯入的加密憑證名稱。
- BUCKET_NAME:您要匯入的加密憑證所在的 Cloud Storage bucket 名稱。
- KEY_NAME:與 Cloud Storage bucket 相關聯的加密金鑰名稱。
- 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 bucket 名稱。
- KEY_NAME:與 Cloud Storage bucket 相關聯的加密金鑰名稱。
- 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 bucket 名稱。
- KEY_NAME:與 Cloud Storage bucket 相關聯的加密金鑰名稱。
- CERTIFICATE_PASSWORD:憑證密碼。
REST v1
如要匯出 TDE 憑證,請使用 instances.export
方法,並指定下列屬性:
使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:要匯出加密憑證的專案名稱。
- INSTANCE_NAME:要匯出加密憑證的 Cloud SQL 執行個體名稱。
- TDE_CERTIFICATE_NAME:匯出後要使用的加密憑證名稱。
- CERTIFICATE_NAME:要匯出的加密憑證名稱。
- BUCKET_NAME:您要匯出加密憑證的 Cloud Storage bucket 名稱。
- KEY_NAME:與 Cloud Storage bucket 相關聯的加密金鑰名稱。
- 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 bucket 名稱。
- KEY_NAME:與 Cloud Storage bucket 相關聯的加密金鑰名稱。
- 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