Хранить IP-адрес в базе данных наилучшим образом - PullRequest
2 голосов
/ 27 июля 2010

Мне нужно создать таблицу для хранения черного списка IP-адресов в случае спамеров в моем блоге.Я хотел бы знать:

  • Каков наилучший тип данных для хранения IP-адресов.
  • Какие другие поля я могу перечислить в этой таблице, которые, по вашему мнению, могут быть полезны против спамера.1006 *

Я использую MS SQL 2008 DB

Спасибо за ваше время

Ответы [ 6 ]

6 голосов
/ 27 июля 2010
4 голосов
/ 08 января 2014

IP v4-адреса составляют 4 байта, IP v6-адреса - 16 байтов, поэтому сохраните их как поле varbinary (16).По вашим тегам вопросов я вижу, что вы используете .Net, так что вы сможете легко получить эти байты, используя IPAddress.GetAddressBytes().Следующий код будет вам полезен, если вы используете Entity Framework или аналогичный ORM.

using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Net;

    [Required, MinLength(4), MaxLength(16)]
    public byte[] IPAddressBytes { get; set; }

    [NotMapped]
    public IPAddress IPAddress
    {
        get { return new IPAddress(IPAddressBytes); }
        set { IPAddressBytes = value.GetAddressBytes(); }
    }
2 голосов
/ 27 июля 2010

Самое простое - сохранить char(15), предполагая IPV4.

Это самая простая форма для использования, не требующая сложных преобразований и вычислений, и если вы не храните очень большие объемы данных (миллионызаписи), производительность не должна учитываться.

1 голос
/ 27 июля 2010

Храните в наиболее удобной форме.Поэтому, если ваше программное обеспечение для ведения блогов дает вам IP-адрес в виде строки, сохраните его в виде строки.Если программное обеспечение дает вам входящий IP-адрес в виде целого числа без знака, сохраните его таким образом.Это избавит вас от необходимости конвертировать IP в пригодную для использования форму для каждого входящего соединения.

1 голос
/ 27 июля 2010

Спаммеры вряд ли будут продолжать использовать один и тот же IP-адрес, поэтому вы будете сражаться в этом проигранном сражении. Лучше реализовать CAPTCHA , чем пытаться устранить IP-адреса или использовать другие данные из соединения для «фильтрации» спамеров. Большая часть этого выполняется автоматизированными инструментами, поэтому CAPTCHA - лучший маршрут.

0 голосов
/ 27 июля 2010

В общем, я думаю, что это будет зависеть от того, какие запросы вы собираетесь запускать. Если запросы просты, основанные на полном сравнении ipaddress или ipaddress не является частью фильтра, я бы сказал, что это просто, так как varchar будет хорошим подходом. Если вы хотите выполнять поиск по сложным запросам, таким как строки, принадлежащие ip-адресам в одной подсети и т. Д., Вы можете сохранить ipaddress в виде четырех значений int в четырех столбцах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...