質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

2回答

1925閲覧

暗号化されたデータのあいまい検索

manz

総合スコア18

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

2クリップ

投稿2018/07/05 15:07

編集2018/07/05 15:13

テーブルに暗号化したデータが格納されており、ある項目をあいまい検索するために、
以下のようなSQLであいまい検索を実施しようと思うのですがそもそもSQLで複合化するのはよろしくないのでしょうか?

SQL

1select name 2from user 3where AES_DECRYPT(UNHEX(name), '複合化するための鍵') LIKE '%田中%';

パフォーマンスの問題もありますが、
SQLログに「複合化するための鍵」が出力されてしまうのは避けたいので別の方法があればご教示頂きたいと思っております。
いったんすべてのデータを取得して、
プログラム(java)で複合化した文字列に「田中」が含まれているものだけを抽出するしかないでしょうか。
(ページングさせる必要があり、検索件数取得・オフセットなどの制御を入れているのであまりプログラム抽出はやりたくありません)

もしくは、"AES_DECRYPT"を含むSQLはログに出力させない・マスキングするなどの方法がありましたら、ご教示頂きたいです。

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

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

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

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

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

guest

回答2

0

ベストアンサー

鍵をバインド変数経由にすれば、SQL上は単なる変数でしかありませんね。

投稿2018/07/06 03:27

sazi

総合スコア25173

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

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

manz

2018/07/06 07:00

ご回答ありがとうございます。 「SET @key = '鍵文字列';」とユーザー変数定義を行い、 「where AES_DECRYPT(UNHEX(name), @key) LIKE '%田中%';」とすれば、 sqlログ上には@keyとしか出力されないことを確認できました。 ただ、「SET @key = '鍵文字列';」はログに出力されてしまうので、 sqlを発行する都度「SET @key = '鍵文字列';」を実施する訳にはいきませんが、 バインド変数(ユーザー定義変数)を、mysqlのグローバルな領域に定義しておくことはできるのでしょうか? (「SET @key = '鍵文字列';」での定義はセッションが切れると失われる認識)
sazi

2018/07/06 07:32

SET GLOBAL で、mysqlが再起動されるまで有効なグローバルシステム変数となります。
sazi

2018/07/06 07:35

それもログが残るから嫌だという場合は、内部に鍵を持ち、鍵を返却するストアドfファンクションにするとか。テーブルにするとか。
manz

2018/07/06 09:04

ストアドファンクションかDBで鍵を取得するようにいたします。 (ストアドファンクションであればファンクション名のみSQLログに出力されることを確認できました) ありがとうございました。
guest

0

復号せずに暗号検索できる「秘匿検索基盤」

ぜんぜん答えになっていないですが、暗号化したまま検索可能な仕組みが有ります。
参考にどうぞ。

投稿2018/07/05 15:29

編集2018/07/05 16:12
oikashinoa

総合スコア2826

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問