2009-12-17 7 views
3

pour des raisons de sécurité, je fais des requêtes de cette façon:MySql Performance Question: MD5 (valeur)

SELECT avatar_data FROM users WHERE MD5(ID) ='md5value' 

Ainsi, par exemple, j'ai ces entrées:

-TABLE.users- 
ID | avatar_data 
39 | some-data 

Je fais cette requête:

SELECT avatar_data FROM users WHERE MD5(ID) ='d67d8ab4f4c10bf22aa353e27879133c' 

'd67d8ab4f4c10bf22aa353e27879133c' est la valeur filtrée par '39' MD5.

J'ai une très grande base de données avec beaucoup d'entrées. Je me demande si cette approche pourrait compromettre la performance de la DB?

+0

Puis-je demander la nature de la technique de sécurité? Ma première pensée était que si vous essayez de rendre l'ID difficile à deviner (peut-être que ID peut être un paramètre de chaîne de requête), alors vous empêcherez simplement la tentative la plus simple - vous ne salerez pas le hachage, semble-t-il. – micahwittman

Répondre

4

Parce que vous utilisez une fonction sur la colonne que vous voulez rechercher (MD5 (ID) =), MySQL devra effectuer un scan de table complet. Bien que je ne sois pas sûr de la raison de cette recherche, pour accélérer les choses, je peux vous suggérer d'ajouter une autre colonne avec les données d'identification traitées et de l'indexer.

Alors vous devriez faire:

SELECT * si vous voulez ce genre de sécurité que vous probablement mieux de l'utilisateur OÙ MD5_ID = « d67d8ab4f4c10bf22aa353e27879133c »

2

Avec cette requête et sans index fonctionnels, oui vous numériseriez le tout. Si vous le faites souvent, vous pouvez pré-calculer le résumé dans une table de substitution ou dans une autre colonne, indexer et rechercher directement.

0

Oui, cela deviendrait probablement très lent et cela n'ajouterait aucune sécurité. MD5 de '39' est assez facile à comprendre. Pour qu'un hachage à sens unique réussisse, il doit contenir des valeurs qui seraient inconnues d'un attaquant. Sinon, l'attaquant va simplement hacher la valeur et vous n'avez rien accompli.

Vous pourriez envisager de poster plus sur ce que vous faites. Par exemple: est-ce un outil d'administration Web? Est-ce protégé par mot de passe? Etc.

0

si vous enregistrez les mots de passe comme un hachage MD5. code d'encodage ne donne pas vraiment de sécurité