SQL 2017でバックアップ暗号化を構成しようとしていますが、いくつか問題が発生しています。
1台のマシンでマスターキーと証明書を作成しても問題はありません。また、別のマシンに証明書をインストールしてバックアップを読み取るときに問題が発生することはありませんが、他のマシンで証明書が作成されているのとは異なるサービスアカウントを実行している場合、これが機能しないという問題があります。
これが私が取っている手順です(私はマスターキーの復元も試みましたが、それもエラーをスローします):
/* Server 1 */
/* Create the master key */
USE master;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'SomeRandomSecureString';
GO
/* Create the certificate to be used for backups */
CREATE CERTIFICATE BackupCert
WITH SUBJECT = 'Backup Encryption Certificate';
GO
/* Backup the master key */
BACKUP MASTER KEY TO FILE = '\\FileShare\DatabaseMasterKey_Master.key'
ENCRYPTION BY PASSWORD = 'SomeRandomPwd';
BACKUP CERTIFICATE BackupCert TO FILE = '\\FileShare\BackupCert.cer'
WITH PRIVATE KEY (FILE = '\\FileShareBackupCert.pvk',
ENCRYPTION BY PASSWORD = 'RandomEncryptionPwd');
GO
/* Server 2 */
/* Create master key */
USE master;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'SomeRandomSecureString';
GO
/* Restore the cert */
CREATE CERTIFICATE BackupCert FROM FILE = '\\FileShare\BackupCert.cer'
WITH PRIVATE KEY (FILE = '\\FileShare\BackupCert.pvk',
DECRYPTION BY PASSWORD = 'RandomEncryptionPwd');
--Msg 15208, Level 16, State 6, Line 32
--The certificate, asymmetric key, or private key file is not valid or does not exist; or you do not have permissions for it.
/* Try restoring the master key instead */
DROP MASTER KEY;
RESTORE MASTER KEY FROM FILE = '\\FileShare\DatabaseMasterKey_Master.key'
DECRYPTION BY PASSWORD = 'RandomEncryptionPwd'
ENCRYPTION BY PASSWORD = 'RandomEncryptionPwd';
--Msg 15317, Level 16, State 2, Line 39
--The master key file does not exist or has invalid format.
私がここで何が起こっているのかを試みて理解するために調べた参照:
また、SMKがすべてのマシンで同じであることを確認しましたが、証明書を復元することはできません。
私はここで何か悪いことをしていると確信していますが、私は何を理解することができませんでした。
任意のアイデアをいただければ幸いです。ありがとう。
証明書のNTFSアクセス許可を修正する必要があります。既定のSQLでは、バックアップを作成すると、NTFSアクセス許可が設定され、SQLサービスを実行しているアカウントのみが証明書のバックアップファイルを読み取ることができます。
これが、単一のアカウントでは機能し、2つのアカウントでは機能しない理由です。