質問: User::whereRaw("CONVERT(AES_DECRYPT(UNHEX(`name`), '{$app_key}') USING utf8) LIKE '%太郎%'")->get(); ``` ### 問題点 ``` ・Laravel側でむりくり検索行く場合はどうしても負荷がかかり大量のクエリが発生した時にはパフォーマンスがよくない点。 ・SQL側でやった場合、クロスサイトスクリプティングなどの不安がありそうな気がしています。 ``` ### その他 ``` ・どちらの方が良いかメリットデメリットをお聞きしたいです。 ・この方法以外に何か方法があれば教えていただきたい。 ```
回答: 式インデックスを利用してインデックスにのみ複合したデータを持たせるという案を提案しておきます。 インデックスの構造まで理解している場合には、解析は可能かもしれませんので、要求レベル次第ですけど。 MySQLでは残念ながら式インデックスに関数は使用できないようです、要件重視されるなら他のDBMSも視野に入れられてはどうでしょうか。 ただ、暗号化と検索性能を同時に求めるのは無理があります。 例えば、暗号化と全文検索は両立できません(少なくとも事例は知らない※) ※可能としている商用ソフトはあるようです。但し、暗号化されたままの状態で検索出来ているかは不明。 情報漏洩に関するものをデータの暗号化に求めるのは厳しいので、保険程度に留めて置く方が無難だと思います。