メインコンテンツまでスキップ

バックアップと復元

適用対象:
SQL Server 2016+TDE 暗号化 DBサーバー間復元

概要​

データベースが TDE で暗号化されると、バックアップファイルも暗号化されます。これらのバックアップを復元するには、同じ非対称キーと DuoKey 資格情報へのアクセスが必要です。

前提条件

  • DuoKey EKM で暗号化されたデータベース
  • SQL Server Management Studio(SSMS)がインストールされていること
  • 適切なバックアップ/復元権限
  • TDE バックアップ要件の理解

バックアップ要件​

TDE 暗号化されたバックアップを復元するには、次のものが必要です。

同じ非対称キー

DEK を保護したキーにアクセスできる必要があります

DuoKey 資格情報

ソースサーバーと同じアプリ資格情報

EKM プロバイダー

ターゲットサーバーにプロバイダーがインストールされている必要があります

ネットワークアクセス

DuoKey プラットフォームへの HTTPS 接続

プライマリサーバーでのバックアップ​

1

データベースが暗号化されていることを確認する

暗号化ステータスの確認SQL
SELECT
  DB_NAME(database_id) AS DatabaseName,
  encryption_state,
  CASE encryption_state
      WHEN 3 THEN 'Encrypted - Ready for backup'
      ELSE 'Not ready - State: ' + CAST(encryption_state AS VARCHAR)
  END AS Status
FROM sys.dm_database_encryption_keys
WHERE DB_NAME(database_id) = 'EmployeeDB';
GO
警告

encryption_state = 3(暗号化済み)の場合のみバックアップに進んでください。

2

バックアップを作成する

完全データベースバックアップSQL
BACKUP DATABASE EmployeeDB
TO DISK = 'C:\Backups\EmployeeDB.bak'
WITH
  COMPRESSION,
  STATS = 10,
  CHECKSUM;
GO
3

バックアップを確認する

バックアップの整合性の確認SQL
RESTORE VERIFYONLY
FROM DISK = 'C:\Backups\EmployeeDB.bak'
WITH CHECKSUM;
GO
ヒント

暗号化されたチャネル(SFTP、SCP、または暗号化されたネットワーク共有)を使用して、バックアップファイルをセカンダリサーバーに安全に転送してください。

セカンダリサーバーでの復元​

セカンダリサーバーの前提条件​

セカンダリサーバーの要件

同じ SQL EKM アプリまたはプライマリから共有されたセットアップファイル
EKM プロバイダーがインストールされているかつ適切に構成されている
同じボールトへのアクセス同じ DuoKey ボールトとキーへのアクセス
ネットワーク接続DuoKey プラットフォームへの HTTPS
1

セカンダリサーバーを構成する

プライマリと同じ資格情報でセカンダリサーバーを構成します:

セカンダリでの EKM の構成SQL
-- Enable EKM
sp_configure 'show advanced', 1;
GO
RECONFIGURE;
GO
sp_configure 'EKM provider enabled', 1;
GO
RECONFIGURE;
GO

-- Create cryptographic provider
CREATE CRYPTOGRAPHIC PROVIDER DuoKeyProvider
FROM FILE = 'C:\Program Files\DKE\EKM\dke_ekm_provider.dll';
GO

-- Create credentials (use same values as primary)
CREATE CREDENTIAL DuoKeyCredential
WITH IDENTITY = '<client_id>',
SECRET = '<enrolled-agent-key>'
FOR CRYPTOGRAPHIC PROVIDER DuoKeyProvider;
GO

-- Map credentials to login
ALTER LOGIN [sa]
ADD CREDENTIAL DuoKeyCredential;
GO
2

既存のキーを開く

DuoKey から既存の非対称キーを開きます:

既存の非対称キーを開くSQL
USE master;
CREATE ASYMMETRIC KEY SQL_EKM_Key
FROM PROVIDER DuoKeyProvider
WITH
  PROVIDER_KEY_NAME = 'SQL_EKM_Key',
  CREATION_DISPOSITION = OPEN_EXISTING;
GO
重要

DuoKey から既存のキーを開くには CREATION_DISPOSITION = OPEN_EXISTING を使用してください。CREATE_NEW は使用しないでください。異なるキーが作成されてしまいます。

3

キー資格情報を作成する

キーログインと資格情報の作成SQL
USE master;
CREATE CREDENTIAL SQL_EKM_Key_Cred
WITH IDENTITY = '<client_id>',
SECRET = '<enrolled-agent-key>'
FOR CRYPTOGRAPHIC PROVIDER DuoKeyProvider;
GO

CREATE LOGIN SQL_EKM_Key_Login
FROM ASYMMETRIC KEY SQL_EKM_Key;
GO

ALTER LOGIN SQL_EKM_Key_Login
ADD CREDENTIAL SQL_EKM_Key_Cred;
GO
4

データベースを復元する

暗号化されたデータベースの復元SQL
RESTORE DATABASE EmployeeDB
FROM DISK = 'C:\Backups\EmployeeDB.bak'
WITH REPLACE;
GO
ヒント

WITH REPLACE オプションは、既存のデータベースがある場合はそれを上書きします。

5

復元を確認する

復元されたデータベースの確認SQL
-- Check database status
SELECT
  name,
  state_desc,
  is_encrypted,
  recovery_model_desc
FROM sys.databases
WHERE name = 'EmployeeDB';
GO

-- Verify encryption is intact
SELECT
  DB_NAME(database_id) AS DatabaseName,
  encryption_state,
  percent_complete
FROM sys.dm_database_encryption_keys
WHERE DB_NAME(database_id) = 'EmployeeDB';
GO

-- Test data access
USE EmployeeDB;
SELECT TOP 10 * FROM Employees;
GO

バックアップのベストプラクティス​

戦略

完全バックアップは毎週、差分は毎日、ログバックアップは毎時

ストレージ

バックアップは TDE によって暗号化されます。安全でアクセス制御された場所に保管してください

オフサイト

災害復旧のためにオフサイトコピーを維持する

検証

作成後は常にバックアップを検証する

自動バックアップジョブ​

SQL Agent バックアップジョブの作成SQL
USE msdb;
GO

EXEC dbo.sp_add_job
  @job_name = N'DailyBackup_EncryptedDBs',
  @enabled = 1;
GO

EXEC dbo.sp_add_jobstep
  @job_name = N'DailyBackup_EncryptedDBs',
  @step_name = N'BackupStep',
  @subsystem = N'TSQL',
  @command = N'
      BACKUP DATABASE [EmployeeDB]
      TO DISK = N''C:\Backups\EmployeeDB_'' +
                CONVERT(VARCHAR(8), GETDATE(), 112) + ''.bak''
      WITH COMPRESSION, CHECKSUM;',
  @retry_attempts = 3,
  @retry_interval = 5;
GO

EXEC dbo.sp_add_schedule
  @schedule_name = N'DailyAt2AM',
  @freq_type = 4, -- Daily
  @freq_interval = 1,
  @active_start_time = 020000; -- 2:00 AM
GO

EXEC dbo.sp_attach_schedule
  @job_name = N'DailyBackup_EncryptedDBs',
  @schedule_name = N'DailyAt2AM';
GO

EXEC dbo.sp_add_jobserver
  @job_name = N'DailyBackup_EncryptedDBs';
GO

復元シナリオ​

トラブルシューティング​

バックアップ情報コマンド​

バックアップ内容の表示SQL
-- View files in backup
RESTORE FILELISTONLY
FROM DISK = 'C:\Backups\EmployeeDB.bak';
GO

-- View backup metadata
RESTORE HEADERONLY
FROM DISK = 'C:\Backups\EmployeeDB.bak';
GO

次のステップ​