別のデータベースでの対称キーの復元に問題があります。暗号化された列を持つ最初の(古い)データベースにテーブルがあります(テーブルには暗号化されたデータが含まれています)古いデータベースのキーは、次の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。データを復号化して、キーを再作成し(すべてのパラメーターを指定して)、新しいキーでデータを暗号化できることを知っていますが、別の解決策を見つけるのは素晴らしいことです。
SQL Serverには組み込みのソリューションはありません。ソースとIDを指定せずに作成された対称キーは、スクリプト化またはコピーできません。
つまり、あなたのケースでは、データをコピーしている間にその場で復号化して再暗号化する必要があります。
また、現在のデータベースに新しいキーを作成し(ソースとIDを指定)、ローカルで復号化して新しいキーを再暗号化することもできます。次に、暗号化されたデータを移動し、新しい場所でキーを再作成できます。これは、新しいキーで使用できる重要なシードデータがすべて揃っているからです。
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を作成します