web-dev-qa-db-ja.com

新しいデータベースで対称キーを復元する方法は?

別のデータベースでの対称キーの復元に問題があります。暗号化された列を持つ最初の(古い)データベースにテーブルがあります(テーブルには暗号化されたデータが含まれています)古いデータベースのキーは、次のSQLスクリプトで作成されています。

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'TESTPSWD'
GO
CREATE CERTIFICATE [CertificateSecurity] WITH SUBJECT = 'Key Protection';
GO
CREATE SYMMETRIC KEY [EncryptKey] WITH
    ALGORITHM = AES_256 
    ENCRYPTION BY CERTIFICATE [CertificateSecurity]
GO

そして今、すべてのデータを含むこのテーブルを新しいデータベースに移動する必要があります。古いデータベースのデータを含むテーブルをインポートします。そして、質問があります:key_sourceとidentity_valueを指定せずに新しいデータベースに同じ暗号化キーを作成する方法はありますか? (持っていないため)上記と同じSQLクエリで作成しようとしましたが、この場合の復号化ではNULLが返されます。

P.S。データを復号化して、キーを再作成し(すべてのパラメーターを指定して)、新しいキーでデータを暗号化できることを知っていますが、別の解決策を見つけるのは素晴らしいことです。

7
k0lpak

SQL Serverには組み込みのソリューションはありません。ソースとIDを指定せずに作成された対称キーは、スクリプト化またはコピーできません。

つまり、あなたのケースでは、データをコピーしている間にその場で復号化して再暗号化する必要があります。

また、現在のデータベースに新しいキーを作成し(ソースとIDを指定)、ローカルで復号化して新しいキーを再暗号化することもできます。次に、暗号化されたデータを移動し、新しい場所でキーを再作成できます。これは、新しいキーで使用できる重要なシードデータがすべて揃っているからです。

4
Sebastian Meine
CREATE SYMMETRIC KEY Testing_sym_key 
WITH ALGORITHM = AES_256
    ,KEY_SOURCE = 'TestingKEY_SOURCE'
    ,IDENTITY_VALUE = 'TestingIDENTITY_VALUE'
    ENCRYPTION BY PASSWORD = N'asasas5'

KEY_SOURCEとIDENTITY_VALUEの同じ値を使用してSYMMETRIC KEYを作成します

1
jazz