1

SQL2012 可用性グループの読み取りインテント セカンダリ レプリカで発生している問題を調査しようとしましたが、まだ何も見つからないようです。インスタンス レベルの TDE についてはいくつか見ましたが、データベース レベルの証明書については見ませんでした。

概要、暗号化/復号化にデータベース証明書を使用する暗号化された列を持つテーブルを持つデータベースがあります。可用性グループのセットアップと、データベースとレプリカの作成はすべてうまくいっているようです (3 つの個別のノード)。ただし、リスナー経由で 2 番目のノードの読み取り専用セカンダリ レプリカに読み取りインテント接続で接続しようとし、暗号化された列を使用してこのテーブルをクエリすると、返されるデータはすべて NULL です。最初にパスワードを使用してマスター キーを開き、クエリを発行すると、通常どおり復号化されたデータが返されますが、そのセッション接続の間だけ持続します。プライマリ レプリカとセカンダリ レプリカでのこの暗号化の問題以外はすべて正常に機能することに注意してください。readWrite を使用してプライマリ データベースにクエリを実行すると、データは正常に取得されます。

これが、各セッション接続が最初にマスターキーを開く必要がある読み取り専用レプリカへの読み取り意図としてクエリを実行するものであるかどうか、誰かが知っていますか? または、何か間違ったものを設定しましたか?これを修正するにはどうすればよいですか?

マスターキーを開くコマンド:

OPEN MASTER KEY DECRYPTION BY PASSWORD = 'password';

暗号化された列を表示するために使用されるクエリ:

SELECT CAST(DECRYPTBYCERT(CERT_ID('CertName'), ColName) AS VARCHAR(200)) aliasColName
  FROM [DBName].[dbo].[tableName]

以下は、プライマリで証明書を作成するために使用される sql です。

USE DBName
DROP CERTIFICATE CertName;
GO

USE DBName
IF NOT EXISTS (SELECT * FROM sys.symmetric_keys 
WHERE [name] LIKE '%DatabaseMasterKey%')
BEGIN
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password'
END
GO 

USE DBName
OPEN MASTER KEY DECRYPTION BY PASSWORD = 'password'
ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY
GO

USE DBName
CREATE CERTIFICATE CertName FROM FILE = 'C:\Cert.cer'
  WITH PRIVATE KEY ( FILE = 'C:\CertKey.pvk' , 
  DECRYPTION BY PASSWORD = 'password' );
GO

CLOSE MASTER KEY
GO

皆さんありがとう!

4

1 に答える 1

1

プロセスを経た後、解決策を見つけました。他の誰かが同じ問題に遭遇した場合に備えて、ここに投稿します。

DB マスター キーはマスター データベースのサービス マスター キーを使用して暗号化されているため、各セッションで明示的に DB マスター キーを「開く」必要がないように、プライマリ サーバーのサービス マスター キーのバックアップをすべてのセカンダリ サーバーに強制的に復元する必要がありました。そのため、読み取り専用ルーティングが適切に機能するためには、暗号化階層を同一に保つために、マスター キーだけでなく、サービス マスター キーも必要です。以下はコードです。

最初にサービス マスター キーをプライマリ サーバーからバックアップし、それをすべてのセカンダリ サーバーにコピーします。

BACKUP SERVICE MASTER KEY TO FILE = 'C:\service_master_key' 
  ENCRYPTION BY PASSWORD = 'password';

次に、FORCE オプションを使用してすべてのセカンダリ サーバーに復元します。

RESTORE SERVICE MASTER KEY FROM FILE = 'C:\service_master_key' 
  DECRYPTION BY PASSWORD = 'password' FORCE

ありがとう

于 2013-02-15T21:08:34.580 に答える