質問する前に、問題/原因を説明することから始めます。
SQLで対称鍵を使用してデータを暗号化する場合。これは次のように設定できます。
CREATE MASTER KEY ENCRYPTION BY PASSWORD='password';
CREATE CERTIFICATE My_Certificate AUTHORIZATION [dbo] WITH SUBJECT = 'My Certificate'
CREATE SYMMETRIC KEY My_Key AUTHORIZATION [dbo] ENCRYPTION BY PASSWORD='CertificatePassword' WITH IDENTITY_VALUE = 'My Key', ALGORITHM = AES_256, KEY_SOURCE = '12345-AABB-1234-BBAA' ENCRYPTION BY CERTIFICATE My_Certificate;My_Certificate
次に、これをde/encryptbykey関数で使用して、データを暗号化したり、その逆を行ったりできます。
問題は、SQL Server 2016(または以前のバージョン)で暗号化されたデータが、SQL Server 2017に移動した場合(証明書を再適用した後)にアクセスできないことです。
これはSQL Server 2017の問題のようです。次を参照してください: https://support.Microsoft.com/en-us/help/4053407/sql-server-2017-cannot-decrypt-data-encrypted-by -earlier-versions
また、推奨される修正は、CU2がインストールされていることを確認し、トレースフラグをグローバルに有効にすることです#4631
私の質問は次のとおりです。使用するハッシュアルゴリズムを指定することは可能ですか(その場合はどのように行うか)。
たとえば、証明書を暗号化するときなどに、SQLにsha2_256を使用するように指示できますか?
たとえば、証明書を暗号化するときなどに、SQLにsha2_256を使用するように指示できますか?
残念ながら、これは現在不可能であるか、または CREATE CERTIFICATE DDLを介して公開されます。ドキュメントから、次のことがわかります。
... SQL Server 2017 uses the SHA2 hashing algorithm to hash the passphrase.
SQL Server 2016 and earlier versions of SQL Server use the SHA1 algorithm ...
また、推奨される修正は、CU2がインストールされていることを確認し、トレースフラグをグローバルに有効にすることです#4631
それは正しいです。実際、私はそのTFを利用可能にするよう要求しました。
おそらく、すべてのデータを復号化し、証明書を再作成してから、すべてを再暗号化することなどが可能です。 -トレースフラグに依存することに懐疑的であるため
対称キーを移行する代わりに、2016年から2017年にバックアップと復元を行うことができます。あなたが言うように2016年にすべてを復号化し、それを2017年にロードして2017年に新しいキーを作成することもできますが、トレースフラグを使用しないと、文字通り1秒の実時間よりも少し時間がかかります。
また、TF4631に関する詳細情報はありますか?このフラグ/それが何をするか/どのように動作するかを説明するMicrosoftの公式ドキュメントを見つけることができませんでした
あなたがリンクしたKB記事にはほとんどの情報がありますが、CU2が出る前にそれについて ブログ投稿を書く について(CU2が出たので更新していないので、Azureの部分が間違っている可能性があることに注意してください)今日現在)。ただし、一般的には、TFが行うことの詳細については触れません。 TFは、有効になっている間、使用を古いハッシュアルゴリズム(2012-2016実装)に変更します。だからこそ、それを有効にし、キーを作成して、すぐに無効にするだけです。