バックアップと復元
バックアップと復元
SQL Server インスタンス間で TDE 暗号化されたデータベースをバックアップおよび復元する
適用対象:
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;
GO3
バックアップを確認する
バックアップの整合性の確認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;
GO2
既存のキーを開く
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;
GO4
データベースを復元する
暗号化されたデータベースの復元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