2011-01-14 14 views
0

DecryptByKeyAutoCert()を使用して解読されたDB暗号化カラムを返すストアドプロシージャがあります。これは、asp.netページから(System.Data.SqlClient.SqlCommand経由で)呼び出され、Repeaterコントロールにバインドされています。復号化手順を実行する列は、私たちのasp.netページに表示されません。プロシージャーによって戻された暗号化されていない列は正常に表示されます。 DecryptByKeyAutoCertはvarbinaryを返しますので、結果をCONVERTからvarcharに実行します。SQL Server DBの復号化カラムをASP.Netページにプルすると失敗する

IE。

SELECT CONVERT(varchar(50), DecryptByKeyAutoCert(CERT_ID('ourCertId') , NULL, b.Address2)) AS Address2 
    ... 

このストアドプロシージャは、SSMSでテストするときに正常に動作します。何か案は?

答えて

1

ASP.Netアプリケーションプールのアカウント接続には、復号化キーへのアクセス権とキーアクセス権がありますか? ourCertIdは何で暗号化されていますか? SSMSからのテストでは、ASP.Netとは異なるユーザーの資格情報で解読を試みます。

+0

私は証明書に使用されているユーザーに明示的な権利を与えていません。それは証明書による暗号化 – user575120

+0

追加するには、権利の問題のようです。私がテストしていたとき、同じユーザーがウェブサイトに使用したので、私はそうしていませんでした。そうすることで、暗号化された列はSSMSでNULLに戻ります。 MSDNのアクセス許可から 対称キーのVIEW DEFINITION権限と証明書のCONTROL権限が必要です。 – user575120

1

ASP.Netアプリケーションがテーブルのメタデータを使用して列を表示していないことを確認します。 Varcharに変換したときに、Address2列がVarbinaryであると考えられている可能性があります。解読された列を使用してビューを作成し、簡易ビューをリピーターのソースとして使用してみてください。

+0

注記しておきますが、暗号化されていない他の列のCAST/Convertはうまく動作します。実際、私は通常のvarbinary列を変換し、それを元に戻すことができます。ビューのアイデアは機能しませんでしたが、テンポラリテーブルにSELECTして、テンポラリテーブルを選択すると動作しました。あまりにも驚いていない。しかし解決策ではありません。注意するために、それはちょうどうまく暗号化された列を返します。 – user575120

0

Remus Rusanu(ありがとう)が指摘しているように、権限が付与されていることを確認する必要があります。私は使用されたユーザーのためにこれを見逃していました。 MSDN

権限から

は、証明書の対称鍵とCONTROL権限のビュー定義の権限が必要です。

+0

これは、DecryptByKeyAutoCertが使用されるときです。 DecryptByKeyが使用されるとき、それらは必要です。 – user575120

関連する問題