为了安全起见,我这样做了一些查询:
SELECT avatar_data FROM users WHERE MD5(ID) ='md5value'举个例子,我有这样的条目:
-TABLE.users-
ID | avatar_data
39 | some-data我执行以下查询:
SELECT avatar_data FROM users WHERE MD5(ID) ='d67d8ab4f4c10bf22aa353e27879133c''d67d8ab4f4c10bf22aa353e27879133c'是由MD5过滤的'39'值。
我有一个非常大的数据库,里面有很多条目。我想知道这种方法是否会影响数据库的性能?
发布于 2009-12-17 18:30:40
因为要对要搜索的列使用函数( MD5(ID)= ),所以MySQL必须执行全表扫描。
虽然我不确定执行这样的搜索的原因,但为了加快速度,我可以建议您添加另一个包含处理过的ID数据的列,并对其进行索引。
所以你应该这样做:
SELECT * FROM user WHERE MD5_ID = 'd67d8ab4f4c10bf22aa353e27879133c'
发布于 2009-12-17 12:37:34
使用该查询而不使用函数索引,是的,您将对整个过程进行表扫描。如果您经常这样做,您可能希望直接将摘要预先计算到代理表或另一个列、索引和查找中。
发布于 2009-12-17 12:44:59
是的,这可能会变得非常慢,而且它真的不会增加任何安全性。'39‘的MD5很容易理解。要使单向哈希成功,它需要包含攻击者未知的值。否则,攻击者只会散列该值,而您并没有真正完成任何事情。
你可以考虑发布更多关于你正在做的事情。例如:这是一个web管理工具吗?有密码保护吗?等。
https://stackoverflow.com/questions/1919486
复制相似问题