4

企業は機密データを保存する必要があります。今は証明書について話さないでください。

DBAは次のことを行います。

  CREATE SYMMETRIC KEY SecureSymmetricKey1 
  WITH ALGORITHM = DESX
  ENCRYPTION BY PASSWORD = N'blabla';

プログラマーはデータを暗号化する必要があり、次のことを行います。

  -- open key
  OPEN SYMMETRIC KEY SecureSymmetricKey1
  DECRYPTION BY PASSWORD = N'blabla'

  -- actual encrpyt
  DECLARE @encrypted_str VARBINARY(MAX)
  SET @encrypted_str =  EncryptByKey(Key_GUID('SecureSymmetricKey1'),'my data');

別のプログラマーがデータを読み取りたいので、次のようにします。

  DECLARE @decrypted_str VARBINARY(MAX)
  SET @decrypted_str = DecryptByKey(...encrypted_str...) 

大丈夫だ。

質問:

  1. プログラマーが対称鍵を開くとき、パスワードを知っている必要があります。プログラマーがパスワードを知っているべきではないと思います。これはどのように解決できますか?

  2. GOD ハッカーが.bakファイル全体を取得し、自分のホーム マシンでバックアップを復元した場合、プログラマーの 1 人が作成した SP を表示し、パスワードを確認できます。そして、ハッカーは次のことができます:

    OPEN SYMMETRIC KEY SecureSymmetricKey1 パスワードによる復号化 = N'blabla'

私は何が欠けていますか?

助けてくれてありがとう。

4

2 に答える 2

2

SQL Server 自体に暗号化があり、すべてまたは列ごとに有効にできる場合に、これを行う必要がある理由はありますか?

独自の方法で進みたい場合は、作成/変更時に暗号化を使用して手順を作成できます。これにより、復元時または復元前にデータベースからロジックを抽出できなくなります。

Create Procedure enc.prMyProcedure With Encryption
as...
于 2012-11-26T10:54:29.430 に答える
1

質問への回答は次のとおりです。1) キーにパスワードを使用しないでください。代わりに、データベース マスター キーを使用してキーを暗号化してください。次に、データベース マスター キーをパスワードとサービス キーで暗号化します。プログラマは、暗号化\復号化中に OPEN SYMMETRIC KEY SecureSymmetricKey1 を書き込む必要があります。ただし、データベース マスター キーのパスワードを彼に教える必要はありません。このパスワードをどこにも書き込む必要がないからです。パスワードは、毎回ではなく、対称キーを作成するときに一度だけ書き込まれます。また、データベース マスター キーがサービス キーで暗号化されている場合、同じ SQL Server インスタンスの下にいる場合は、データベース マスター キーを開くためのパスワードを指定する必要はありません。

2) 誰かがあなたの .bak ファイルを開こうとしても、パスワードなしではデータベース マスター キーを開くことができないため、開けません。データベース マスター キーがないと対称キーは開きません。そのため、ストアド プロシージャを実行しても何も表示されません。

お役に立てば幸いです。

于 2014-03-14T21:45:30.647 に答える