none
SHA2-256ハッシュ化した値がSSMSで検索出来ない

    質問

  • SQLDATAWAREHOUSE内であるテーブルの項目をハッシュ化(HASHBYTES)しました。

    ハッシュ化の理由は会員IDなどの項目をセキュリティ上、秘匿するためです。

    そのハッシュ化した値をSSMS(Microsoft SQL Server Management Studio)にて、

    SQLで検索しようとしたところ、該当ハッシュ値のデータは存在するにもかかわらず、

    クエリの結果が0件となりました。

    正しく出力出来るようにどのような方法を取ればよいでしょうか?

    構文例

    SELECT TOP 1 KAIIN FROM TEST.TEST1

    KAIIN

    -------------------------------------------

    0xB4E7954122BA6FC09D228CFE45EB10921E698AAB0970DFC2AF3585F401D92F62

    SELECT TOP 1 KAIIN FROM TEST.TEST1
    WHERE KAIIN='0xB4E7954122BA6FC09D228CFE45EB10921E698AAB0970DFC2AF3585F401D92F62'

    KAIIN

    -------------------------------------------

    0

    何らか文字列操作、変換関数などが必要なのでしょうか?

    ご教示いただければ幸いです。

    2018年3月26日 1:10

すべての返信

  • KAIIN列の型は文字列型にしてあるのでしょうか?

    ※varbinaryやbinaryなどではなく?

    先頭の0xは普通16進数であることを示す接頭辞で、バイナリデータを表示しようとしたらこの形式の文字列に変換されているのではと思われます。

    ※そうでないと、登録時に0xこみで登録していることになるので(もしかしたら本当にそうなのかもしれませんが)

    もしvarvainaryなどの型であれば、それを考慮した検索条件の指定が必要になると思いますが、その辺は知らないのでちょっとわかりません。

    2018年3月26日 2:03
  • binaryなどの型で保存されている場合は、たとえば

    SELECT TOP 1 KAIIN FROM TEST.TEST1
    WHERE CONVERT(varchar(66), KAIIN, 1) = '0xB4E7954122BA6FC09D228CFE45EB10921E698AAB0970DFC2AF3585F401D92F62'

    みたいな感じですかね(間違っているかもしれませんが)。

    ※バイナリ型で直比較できるようなら、変換を逆にした方がいいかもしれませんが


    • 編集済み なちゃ 2018年3月26日 2:24
    2018年3月26日 2:22
  • ご返信ありがとうございます。

    カラムの属性を確認するとvarvainaryになっていました。

    該当項目を分散キーにしていることもあり、カラムの属性変更が出来ません。

    CONVERT関数などで変換するとしたら、どのような構文になりますでしょうか?

    リファレンスだけだとどうも分かりづらく、ご教示いただければ幸いです。


    2018年3月27日 9:19
  • varbinaryなら、とっても大きい整数、みたいな扱いなので、シングルクオートで囲う必要はないです。

    つまり、次のようなクエリですね。
    SELECT TOP 1 KAIIN FROM TEST.TEST1
    WHERE KAIIN=0xB4E7954122BA6FC09D228CFE45EB10921E698AAB0970DFC2AF3585F401D92F62


    jzkey

    2018年3月27日 13:42