明らかにそれらは閲覧されることを意図したものではないため、それらを検索することには問題があります。
私が過去に使用した1つのトリックは、暗号化する前に暗号化されたデータをハッシュし、インデックス付き列にハッシュを保存することです。もちろん、これは値全体を検索する場合にのみ機能します。部分的な値には同じハッシュがありません。
必要に応じて、ハッシュの「フルテキスト」インデックスを作成することでおそらくこれを拡張できますが、本当に速く複雑になる可能性があります。
補遺
辞書攻撃に対する脆弱性についてのチャットでのかなり長い議論ごとに、回答に脚注を追加することが提案されているため、上記のアプローチに対するこの潜在的なセキュリティリスクについて説明します。
辞書攻撃:辞書攻撃は、誰かが既知の値のリストを事前にハッシュし、そのハッシュをデータベース内のハッシュされた列と比較することです。一致するものが見つかった場合、既知の値は実際にハッシュされているものである可能性があります(ただし、ハッシュは一意であることが保証されていないため、明確ではありません)。これは通常、ハッシュが辞書と一致しないようにランダムな「ソルト」を追加または追加して値をハッシュすることで軽減されますが、上記の答えは検索性を失うためソルトを使用できません。
この攻撃は、パスワードのようなものを扱う場合は危険です。一般的なパスワードハッシュの辞書を作成すると、そのハッシュ値をテーブルですばやく検索し、そのようなパスワードを持つユーザーを識別し、そのユーザーのIDを盗むために資格情報を効果的に抽出できます。
SSN、クレジットカード番号、GUIDなど、カーディナリティの高いアイテムの場合はそれほど危険ではありません(ただし、これらの保存に関連するさまざまなリスク[読み取り:法的]があるため、それらの保存についてアドバイスするつもりはありません。 )。
これは、辞書攻撃が機能するために、可能な値とそのハッシュの辞書を事前に作成しておく必要があるためです。理論的には、可能なすべてのSSNの辞書を作成できます(すべてのフォーマット順列が削除されたと仮定すると、10億行、クレジットカードの数十兆のエントリ)...しかし、それは通常辞書攻撃のポイントではありません基本的には、あらゆる値を体系的に調査するブルートフォース攻撃に匹敵します。
SSNを人に一致させようとしている場合は、特定の SSNまたはクレジットカード番号を検索することもできます。繰り返しますが、通常は辞書攻撃のポイントではありませんが、実行することは可能です。したがって、これが回避する必要があるリスクである場合、私の答えはあなたにとって良い解決策ではありません。
だからあなたはそれを持っています。暗号化されたすべてのデータと同様に、通常は何らかの理由で暗号化されているため、データとそれを保護しようとしているものに注意してください。