teratail header banner
teratail header banner
質問するログイン新規登録
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Q&A

解決済

1回答

746閲覧

SQLSever:Binayデータの検索について

Everlasting

総合スコア11

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

0グッド

1クリップ

投稿2018/06/14 15:27

0

1

SQLSever2012で、Binary型で格納したデータと一致するかどうかの検索を行いたいと考えています。

具体的には、

①Binary型のカラム(BinaryData)に、ENCRYPTBYPASSPHRASE(Binary型が戻る)で暗号化したデータを格納
②「ユーザ入力値」を、ENCRYPTBYPASSPHRASEして、①と比較

ということをしようとして、

Select * From XXX Where BinaryData = ENCRYPTBYPASSPHRASE('Password','ユーザ入力値')

という検索をしているのですが、存在するはずの「ユーザの入力データ」でも、ヒットしてくれません。

Binayデータの比較の場合、何か特殊な処理が必要なのでしょうか? お知恵をお借りできれば幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

暗号化されたものとの比較ではなく、復号したものと比較する必要があります。

SQL

1Select * From XXX 2Where DecryptByPassphrase('Password', BinaryData) = convert(varbinary, 'ユーザ入力値')

投稿2018/06/15 00:24

sazi

総合スコア25430

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Everlasting

2018/06/15 01:52

ありがとうございます。 実は一旦復号して検索するように実装してみたのですが、この方法だと非常に負荷(CPU)がかかるようで、サーバがダウンしてしまったのです。復号しないで検索する方法があれば・・・と思ったのですが、やっぱり無理なんでしょうか?
sazi

2018/06/15 02:07 編集

純粋に検索用途を考えておられるなら、インデックスも必要です。 鍵が固定で構わないなら、ファンクションインデックスまたは式インデックスを試して下さい。 復号の負荷はインデックス作成時となり、検索時の負荷は下がります。 但し、他のDBMSではありますが、SQLSERVERでは実証したことはありませんので、インデックスの作成自体できないかもしれませんが。
sazi

2018/06/15 02:05

もう一つの方法としては、SQLの構成自体を変更し、暗号化項目の検索を一番外側にして、対象件数を極力少なくすること。
sazi

2018/06/15 06:04

>umyuさん フォローありがとうございます。 こんなのがあるということは、暗号化項目を検索対象にするのは色々とあるって事なんでしょうね。
sazi

2018/06/15 06:06 編集

そもそも、行ごとに鍵が必要って言うのがそれだけで嫌な感じがします。
umyu

2018/06/15 06:10

>saziさんへ 回答のコメント欄をお借りして失礼しました。 データベースに格納している暗号文を復号するときに、毎回復号するためCPU負荷が掛かってしまうので、そのための対応策ですね。暗号キーとは別の鍵で平文をHMAC化して、検索するときはHMACデータと比較する。
Everlasting

2018/06/19 02:21

遅くなりすみません。ご回答頂き、ありがとうございました! Binayデータのなかなか一筋縄ではいかないことが判りましたので、別の方法も併せて検討してみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問