Является ли mysql auto increment безопасным для использования в качестве userID?

Я работаю на веб-сайте, который позволяет людям создавать профили онлайн. Мне было интересно, если это правильный выбор для использования идентификаторов MySQL AUTO_INCREMENT ed в качестве идентификаторов пользователя. Также, имея в виду, что мне может понадобиться дублировать базу данных на нескольких серверах в один прекрасный день?

например. вы бы использовали этот метод для userIds на веб-сайте, таком как Twitter или Facebook?


Я пробовал генерировать userIds с PHP раньше. Я использовал что-то вроде этого:

function generateID() {
      $possible = "1234567890";
      $code = "";
      $characters = mt_rand(7,14);
      $i = 0;
      while ($i < $characters) { 
            $code .= substr($possible, mt_rand(0, strlen($possible)-1), 1);
            $i++;
      }
      return $code;
}

Это дало тип значений, которые мне нужны, но мне всегда приходилось проверять из БД, если этот идентификатор еще не существует.

Нет ли лучшего подхода?

Ответ 1

Является ли mysql auto increment безопасным для использования в качестве идентификатора пользователя?

Если ваша система безопасности надежна, в принципе, да. Но в целом веб-разработчики испытывают дискомфорт, выставляя идентификаторы, которые позволяют угадывать другие идентификаторы, просто увеличивая или уменьшая число. Многие прибегают к случайным, многозначным идентификаторам.

В более неясной ноте числовые идентификаторы также могут позволить конкурентам оценить ваш рост, отслеживая, как увеличивается инкрементное значение.

Ответ 2

Нет, это не очень хорошая идея, потому что идентификаторы auto_increment не являются переносимыми. Для ваших идентификаторов пользователей вы хотите, чтобы идентификаторы, которые могут быть скопированы, восстановлены, перемещены между экземплярами базы данных и т.д., Не беспокоясь о столкновении идентификаторов.

Было бы лучше создать уникальный номер или буквенно-цифровую строку, используя что-то вроде UUID.

Ответ 3

Учитывая, что вы планируете заранее и потенциально будете распространять данные по базам данных, вам лучше подумать об использовании функции UUID() для получения уникальных идентификаторов. Это упрощает слияние данных в будущем.

Ответ 4

лично, да, я так думаю, до момента. При дублировании таблицы базы данных с полем автоматического увеличения, я думаю, что поле сохраняет максимальное значение (в зависимости от того, как вы его дублируете, сценарий, который я имею в виду, это mysqldump с данными), поэтому, когда вы добавляете новую строку, она будет назначена следующий идентификатор.

Однако, если вы должны были запускать это сразу в нескольких базах данных, и они не были реплицированы, вам понадобится другой способ генерации идентификаторов, чтобы избежать получения строк с одинаковым идентификатором (хотя я не могу придумать сценарий, где вы это сделаете).

Я не мог сказать, лучше ли это или нет, но это, безусловно, работает.

Ответ 5

Да Если вы удалите строку с идентификатором 7, следующее значение автоматического приращения будет равно 8, а не 7. Таким образом, все значения, безусловно, будут уникальными. и вам нужно будет усечь таблицу, чтобы снова запустить автоинкремент. SO, вы всегда можете использовать поля автоматического прироста для пользовательских IDS.