2010-06-21 2 views
1

Quelle est la meilleure façon d'implémenter une méthode qui crée et assigne des ID à un utilisateur sur une application asp.net?meilleure pratique pour créer un ID utilisateur générique

Je pensais à l'aide DateTime tiques et id fil

Je veux vous assurer qu'il n'y a pas de collision et ids utilisateur sont uniques.

L'ID peut être une chaîne ou longue.

devrais-je utiliser MD5 sur certaines informations que je recueille auprès de l'utilisateur? que serait-ce?

J'ai vu que le taux de collision md5 est très faible.

+0

Y a-t-il des problèmes de sécurité? L'ID doit-il être difficile à deviner? Y a-t-il des problèmes de performance? – Mashmagar

Répondre

3

La solution la plus simple est un nombre auto-incrémenté. Cela nécessite un serveur central.

La date et l'heure plus un hachage unidirectionnel sont pour les ID pseudo-aléatoires. Doivent-ils être pseudo-aléatoires pour la sécurité? Cela ne devrait pas être invoqué pour l'unicité parce que, par définition, les hash à sens unique entrent en collision. Vous aurez toujours besoin d'un serveur central pour vérifier les doublons avant d'émettre l'ID.

GUID sont les meilleurs si les ID sont créés dans un système distribué (pas de serveur central pour générer l'ID). Les GUID peuvent être générés sur des machines distinctes et ne doivent pas entrer en collision. Cela dépend de l'implémentation, mais certains algorithmes GUID sont simplement pseudo-aléatoires, et oui, il y a toujours une possibilité de collision.

7

J'utiliserais des GUID basés sur les informations limitées que vous avez données.

+0

en utilisant GUID garantit l'unicité? – DarthVader

+2

GUID ne sont pas toujours les meilleurs pour les ID, en particulier si elles sont la clé primaire dans une base de données, mais compte tenu de la façon dont la question originale est libellée, je suis d'accord. – Randolpho

+0

Oui. Selon http://msdn.microsoft.com/en-us/library/system.guid.newguid.aspx "La chance que la valeur du nouveau Guid sera tous les zéros ou égal à tout autre Guid est très faible." – Reddog

1

Guid est de loin le meilleur choix pour générer des identifiants uniques pour quelque chose comme un ID utilisateur. Ils sont absolument garantis unique globally (d'où le nom). Afin de mieux travailler avec un index en cluster, vous devez utiliser NEWSEQUENTIALID(). Cela génère des identifiants séquentiels qui peuvent être ajoutés à l'index et empêche le serveur SQL de devoir réorganiser et indexer l'index chaque fois qu'une valeur est ajoutée. Il existe une petite préoccupation de sécurité associée à l'utilisation de cette fonction en ce sens que la valeur suivante de la séquence peut être déterminée.

+0

Les GUID ne sont pas "absolument garantis" pour être globalement uniques. Microsoft déclare que leur implémentation a "une très faible probabilité d'être dupliquée". http://msdn.microsoft.com/en-us/library/system.guid.aspx –

+0

Microsoft disent aussi qu'ils sont uniques au monde: http://msdn.microsoft.com/en-us/library/ms190215(SQL. 90) .aspx « aucun autre ordinateur dans le monde va générer un double de cette valeur GUID. » ... mais nous parlons de choses différentes. Vous faites référence à l'implémentation .Net où je fais référence à l'implémentation de Sql Server; donc nous avons tous les deux raison. – TheCodeKing

Questions connexes