mysql - 包含加密数据的 BLOB 上的索引

标签 mysql encryption indexing blob aes

我的表中有一堆 BLOB 类型的列。这些列中包含的数据使用 MySQL 的 AES_ENCRYPT() 函数进行加密。其中一些字段正在我正在构建的应用程序的搜索部分中使用。在经常访问的列上放置索引是否值得?我不确定它们是 BLOB 的事实或数据本身已加密的事实是否会使索引变得毫无用处。

编辑:以下是有关我的具体案例的更多详细信息。有一个大约有 10 列的表,每个列都是 BLOB。插入到该表中的每条记录都将使用 AES_ENCRYPT() 函数进行加密。在我的应用程序的搜索部分,用户将能够输入他们的查询。我接受他们的查询并像这样 SELECT AES_DECRYPT(fname MYSTATICKEY) AS fname FROM some_table 解密它,以便我可以使用 LIKE 子句执行搜索。我很好奇的是,索引是否会索引加密数据而不是解密返回的实际数据。我猜测,如果索引仅应用于加密的二进制字符串,那么它根本不会提高性能。我这样说有错吗?

最佳答案

注意以下几点:

因此,IMO,您的猜测是正确的 - 索引不会帮助您提高搜索性能。

请注意,“为加密列建立索引”是一个相当常见的问题 - 网上关于它的文章很少。例如(尽管这已经很老了并且对于 MS SQL 来说它确实涵盖了一些想法):http://blogs.msdn.com/b/raulga/archive/2006/03/11/549754.aspx

另请参阅:What's the best way to store and yet still index encrypted customer data? (最上面的答案链接到我在上面找到的同一篇文章)

关于mysql - 包含加密数据的 BLOB 上的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14899704/

相关文章:

php - 每次插入MySQL数据库的IP都会改变

java - (源代码很大)初学者Java项目,很多问题,与加密字母表有关

java - 密码函数 : WRONG FINAL BLOCK LENGTH Android Studio

hadoop - 如何以mapReduce方式建立Lucene索引?

mysql - 使用 INNER JOIN 更新 SET CASE?

mysql - 按字符长度排序但不想过滤

mysql - sql 删除带有 where、and 或 laravel 的查询

c# - 加密字节数组,从字符串转换为8位整数数组

mysql - 2013 error Lost connection to MySQL server during query 错误

c++ - 枚举和索引所有可能的 n 个顶点的树