Je souhaite enregistrer l'adresse IP d'un utilisateur dans ma base de données au cas où des problèmes d'ordre juridique surgiraient et que nous devions déterminer qui avait effectué cette action. Comme je doute fortement, je vais devoir utiliser ces données (enfin, peut-être pour compter des hits uniques ou quelque chose) pensez-vous que je peux simplement vider le REMOTE_ADDR
dans un champ? Si oui, quelle devrait être la longueur de ce champ? 39 caractères devraient correspondre à une adresse IPv6, non? Je ne sais pas si je pourrai en avoir, mais juste au cas où ...Enregistrement d'une adresse IP dans la base de données
Répondre
Si vous utilisez Postgres, il existe des data types for network addresses spécifiques.
Dans SQL Server, nous avons utilisé VARBINARY [16] pour les adresses IP pour IPv4 (4 octets) et IPv6 (16 octets).
Mais dans votre cas, si c'est juste pour un examen manuel occasionnel et non pour le traitement de la machine, il suffit de stocker la chaîne. (Et oui, 39 caractères seraient le maximum.)
Stockez certains une représentation complète et sans ambiguïté des données. Lorsque vous avez besoin d'interroger les données et lorsque vous déterminez le type de requête sur les données dont vous avez besoin, vous devez déterminer comment transformer les données afin de pouvoir les interroger efficacement.
Si vous stockez l'adresse IP de, disons, la première visite de l'utilisateur dans une session utilisateur donnée, vous pouvez envisager d'effectuer une recherche DNS inversée sur l'adresse IP. Cela donnera des informations sur le FAI de l'utilisateur. En cas de problèmes juridiques, vous avez maintenant plus d'informations. Mais comme ces recherches coûtent cher (en termes de temps), vous pouvez le faire en tâche de fond et vous pouvez le faire uniquement pour les hits initiaux, et non pour les autres hits de la même adresse IP dans une session utilisateur donnée.
La méthode la plus efficace pour stocker des adresses IP dans un champ de base de données est de les convertir en nombre entier au lieu d'utiliser une chaîne. Comme vous le mentionnez REMOTE_ADDR, je suppose que vous utiliserez PHP. Vous pouvez convertir les addres IP à une valeur appropriée en utilisant ip2long()
sprintf('%u',ip2long($_SERVER['REMOTE_ADDR']))
Pour reconvertir un, vous pouvez utiliser les cheveux de DB IP long2ip()
Oh ... ne pas penser à chercher un tel type de données. Autant utiliser aussi ça! – mpen