
UUID затмевают идентификаторы с автоинкрементом, и это не близко
3 марта 2023 г.Еще в ноябре 2021 года, когда я начал создавать бэкэнд-архитектуру Bounty, я решил использовать UUID для всех первичных ключей в нашей базе данных postgres, обеспечивающей работу большинства текущих приложений. Результаты были замечательными.
Совсем недавно, в начале 2021 года, я работал над большой системой, связанной с деньгами. Система использовала целочисленные идентификаторы в RDMS, и я очень нервничал, видя все, что могло пойти не так…< /p>
Сначала недостатки.
На протяжении многих лет в школе людей учили использовать автоинкрементные идентификаторы BigInt
в качестве первичных ключей. Впервые я увидел что-то другое, когда впервые использовал Mongo в 2013 году. У них была система идентификаторов объектов, которая представляла собой случайную строку. Я считаю, что это было сделано для того, чтобы вы могли легко разбивать базу данных между экземплярами записи.
Если над одной и той же коллекцией работали несколько авторов, и им нужно было координировать свои действия, чтобы определить, кто будет увеличивать целое число для первичного ключа, это может быть непросто. В качестве решения этой проблемы была введена система случайных строковых идентификаторов объектов.
Но есть и недостатки.
UUID выглядит следующим образом: 7c82deda-9461-4128-af05-d8c3acd16c47
Очевидно, что оно больше, чем целое число, и для его случайного генерирования требуется некоторое время процессора. Вам также потребуется поле временной метки createAt
и проиндексируйте это поле, если вы хотите упорядочить по времени, тогда как с автоинкрементным целочисленным первичным ключом вы сможете просто сортировать по первичному ключ. Но помимо эффективности целочисленного PK, на этом преимущества, на мой взгляд, заканчиваются..
Преимущество в плане безопасности — отсутствие атак с увеличением идентификатора
Одной из наиболее распространенных уязвимостей в веб-приложениях является увеличение идентификатора объекта. Официально эта уязвимость называется «IDOR» — небезопасная прямая ссылка на объект.
Пример: вы смотрите в свой браузер и видите, что он говорит /customer/12345/invoice/23399430
, что произойдет, если вы измените это и нажмете /customer/12345/ инвойс/23399431
? Ну, а если ваш разработчик об этом не подумал, вы можете увидеть чужой счет.
Как насчет того, чтобы сделать это с UUID? Вы не можете. Пространство ключей слишком велико, чтобы угадать, какие другие могут существовать.
Эта уязвимость никогда не должна существовать, если у вас есть осторожные программисты (всегда следует проверять разрешения на доступ к объектам в API), но поверьте мне, она повсюду в современных веб-приложениях.
Преимущество в эксплуатации — никаких ошибок при копировании и вставке
У нас есть много клиентов, которые делают странные вещи и подают заявки в службу поддержки. Мы занимаемся платежами, поэтому всегда есть крайний случай.
Позвольте мне сказать вам, что ваша операционная команда копирует идентификаторы и делает вещи на ваших внутренних панелях управления, которые вы им сделали (у нас около 40 приложений для перенастройки 😂), и они будут делать ошибки, потому что они люди.
Вполне возможно совершить ошибку, если они перепутают значение userId
10001 со значением orderId
10001. Но если это UUID? Нет, они не могут перекрываться.
Вам потребуется 2,71 квинтиллиона поколений UUID, чтобы 1ccccb76-206f-4abc-930b-09ee47764874
столкнулся с тем же UUID в другой таблице.
Преимущества кода: ошибки разработчиков уменьшаются
Подобно тому, как ваша операционная команда БУДЕТ путать копирование и вставку идентификаторов из одной таблицы в другую, вы, разработчики, в какой-то момент будете делать то же самое. У вас будет функция с такой подписью: freezeBankAccount(bankAccountId: number)
В миллионе строк кода кто-то передаст ему userId
вместо bankAccountId
, и он заморозит банковский счет случайного пользователя, потому что основной ключевое пространство идентификатора ключа типа integer почти наверняка будет перекрываться между таблицами с именами User
и BankAccount
.
Что произойдет, если вы допустите эту ошибку с UUID?
Ничего, вы увидите ошибку в журналах после развертывания «BankAccount not found» в функции с именем freezeBankAccount
, потому что нет перекрытия. Вы определяете причину (в вызов функции был передан неправильный идентификатор) и вносите исправление.
Что, если бы вы использовали целочисленные идентификаторы и допустили эту ошибку?
Через две недели вы узнаете об этом, потому что было получено 100 запросов в службу поддержки от людей, не имеющих доступа к своим банковским счетам, и теперь вы столкнулись с серьезной проблемой очистки операций. В худшем случае в крупной организации она месяцами работает в производственной среде, пока вы об этом не узнаете, а теперь приходится иметь дело с массой негативных последствий.
Также опубликовано здесь.
Оригинал
Recent Post
-
Как создать иностранную обертку данных в Postgresql и Aurora postgresql на AWS RDS
15 августа 2025 г. -
Выбор между SQL и NOSQL - до того, как вы выбираете вас.
14 августа 2025 г. -
Какой формат pg_dump самый быстрый и самый маленький? Эксперимент с 21-резор
1 августа 2025 г. -
Как настроить Apache Dolphinscheduler с PostgreSQL и Zookeeper на Linux
31 июля 2025 г. -
Я потерял свою производственную базу данных на ночь - здесь инструмент, который я построил, так что вы не
25 июля 2025 г.
Categories
- Python
- blockchain
- web
- hackernoon
- вычисления
- вычислительные компоненты
- цифровой дом
- игры
- аудио
- домашний кинотеатр
- Интернет
- Мобильные вычисления
- сеть
- фотосъемка видео
- портативные устройства
- программного обеспечения
- телефон и связь
- телевидение
- видео
- мир технологий
- умные гиды
- облако
- искусственный интеллект
- се
- Samsung
- умные города
- digitaltrends
- отели
- Startups
- Venture
- Crypto
- Apps
- безопасность
- техника и работа
- cxo
- мобильность
- разработчик
- 5г
- майкрософт
- инновации
- Права и свободы
- Законодательство и право
- Политика и общество
- Космическая промышленность
- Информационные технологии
- Технологии
- Образование
- Научные исследования
- Автомобильная промышленность
- Программная инженерия
- IT и технологии
- Веб-разработка
- Программирование
- Автоматизация
- Карьерный рост
- Программирование и анализ данных
- Трудоустройство
- Политика
- Искусственный интеллект
- ИТ-технологии
- Программное обеспечение
- Экологическая политика
- Образование и рынок труда
- Политика и право
- Microsoft Teams и SharePoint
- Информационная безопасность
- Кибербезопасность
- Налоги
- Образование и карьера
- Интернет и технологии
- Технологии, Государственные услуги
- Политика и технологии
- Разработка программного обеспечения
- Разработка ПО
- Машинное обучение
- Налогообложение, технологии, открытый исходный код
- Финансы и налоги
- Технологии, Интернет, Экология
- Интернет, безопасность
- Технологии и политика
- Операционные системы
- Профессиональная разработка
- Технологии, Безопасность
- Интернет и общество
- Финансовая индустрия
- Налоговый учёт
- Общественное здравоохранение
- Технологическая отрасль
- Юриспруденция
- Технологии и государство
- Здоровье и фитнес
- IT-инфраструктура
- Технологии и ИИ
- Здравоохранение
- IT
- Технологии, Экономика
- Музыка и технологии
- Здоровье и питание
- IT и безопасность
- Бизнес и предпринимательство
- Технологии, Программное обеспечение
- Технологии и инновации
- Технологии, данные, этика
- Технологии и Интернет
- Технологии и SaaS
- Медицина и здравоохранение
- Онлайн-видеосервисы
- Финансы и технологии
- Чтение и саморазвитие
- Экономика и бизнес
- Безопасность данных
- Удаленная работа
- Авиация и технологии
- Технологии, Игры
- Энергетика
- Социальные сети, безопасность, технологии
- Саморазвитие
- Безопасность информации
- Бизнес и карьера
- Технологии и отношения
- Игровая индустрия
- Компьютерная индустрия
- Математика, Искусственный интеллект
- Наука и технологии
- Технологии и безопасность
- Технологии, Удаленная работа, Бизнес
- Видеоигры
- Технологии, Искусственный интеллект, Этика
- Технологии, социальные сети, 6G
- Технологии, Программирование, AI, Разработка ПО
- Программирование, Разработка ПО, Технологии
- Животные
- Технологии, Искусственный интеллект
- Программирование, карьера, технологии, обучение
- Бизнес и технологии
- Технологии, Безопасность данных
- Астрономия и физика
- Продуктивность, личное развитие
- Медиа и Технологии
- Программирование и Искусственный Интеллект
- Социальные сети
- Политика и экономика
- Технологии, Медицина, Искусственный интеллект
- Технологии и управление
- Космос и астрономия
- Общество и политика
- Космические исследования
- Веб-дизайн
- Искусственный интеллект и безопасность данных
- Технологии, Безопасность, Конфиденциальность
- Экологическая проблема
- Технологии, Погода
- Авиация
- Транспортная сфера
- Технологии и бизнес
- Игровая промышленность
- Телевидение и реклама
- Аналитика данных
- Технологии и кибербезопасность
- Маркетинг
- Технологии и гаджеты
- Технологии, Авиация, Инновации
- Финансы и инвестиции
- Технологии и общество
- Рыночный анализ
- Космология
- Данные и бизнес
- IT и программирование
- Технологии и право
- Программирование и разработка
- Медицинские технологии
- Авиационная промышленность
- Технологии и искусственный интеллект
- Генетическая инженерия
- Бизнес и инвестиции
- Компьютерная промышленность
- Психология и социология
- Образование и технологии
- Рынок труда
- Технологии, Стартапы
- Технологии, Приватность, Чтение
- Маркетинг и продажи
- Виртуальная реальность
- Технологии, Смартфоны, Маркетинг
- Технологии, Бизнес, Личностный рост
- Экологические проблемы
- Экономика и технологии
- IT и карьера
- Интернет и безопасность
- Разработка и технологии
- Биотехнологии
- Интернет-магазины, кибербезопасность
- Финансы
- Безопасность и технологии
- Экономика
- Защита данных
- Data Science
- Карьера и работа
- Финансовый успех, мошенничество, маркетинг
- Безопасность
- Экология
- Космическая индустрия
- Программирование, Python, Обучение
- Технологии искусственного интеллекта
- Технологии, Дизайн, iOS
- Программирование, DevOps, Kubernetes
- Социальные сети и пропаганда
- Корпоративная этика
- Управление IT-инфраструктурой
- Здоровье и медицина
- Медицина
- Медицинская промышленность
- Разработка и дизайн
- Искусственный интеллект, Диагностика систем
- Образование и психология
- Технологии, Автомобильная промышленность
- Автомобили и путешествия
- Астрономия и космология
- Программирование и технологии
- IT, работа в офисе, эмоциональный интеллект
- Компьютерная техника
- Здоровье и благополучие
- Управление персоналом
- Политика и управление
- Бизнес и экономика
- Социальные сети, Пропаганда, Информационная безопасность
- Технологии и автоматизация
- Геймдизайн
- Экология и технологии
- CRM-системы, IT-инфраструктура
- Права человека
- Цифровая цензура, свобода слова, технологии
- Технологии, Искусственный интеллект, Работа
- Наука о данных
- Астрономия, Наука
- Интернет и цифровые технологии
- Технологии, управление
- Интернет и связь
- Технологии и конфиденциальность
- Интернет и свобода слова
- Психология и социальные науки
- Книги и литература
- Работа и карьера
- Финансовые технологии
- Психология и саморазвитие
- IT, программирование, сети
- Технологии, Видеоигры
- Экология и энергетика
- Космонавтика
- Медицина и технологии
- Игры и развлечения
- Музыкальная индустрия
- Логистика и складирование
- Бизнес и финансы
- Экология и окружающая среда
- Правозащита
- Социальные сети и дезинформация
- Технологии и рынок труда
- Технологии, Искусственный интеллект, Рынок труда
- Технологии и будущее
- Медицина и здоровье
- Социальные медиа
- Экология, политика, общество
- Экономика и Финансы
- Разработка игр
- Пропаганда и дезинформация
- Медицинские исследования
- Онлайн-знакомства
- Политика и СМИ
- Энергетика и электромобили
- Климатические изменения
- Технологии, Рынок труда
- IT и управление данными
- Безопасность и кибербезопасность
- Интернет-технологии
- Психология и личностное развитие
- Технологии, Мессенджеры
- Цифровые технологии
- Здоровье и самосовершенствование
- Технологии и AI
- Технологии и спорт
- IT, Разработка программного обеспечения
- Экология и климат
- Космос и технологии
- Юридическая сфера
- Безопасность в интернете
- Программирование, Искусственный Интеллект, Качество ПО
- Технологии и мессенджеры
- Социальная справедливость
- Технологическая индустрия
- Личностное развитие, Time-менеджмент, Психология
- Бизнес и менеджмент
- Технологии, Микросхемы, Автономные системы
- Фриланс и предпринимательство
- Социальные сети и искусственный интеллект
- Криминальные дела
- Социальные сети, Маркетинг
- Энергетика и экология
- Технологии, Искусственный Интеллект, Полиция
- Программирование, Искусственный интеллект, Рынок труда
- Социальные сети, дезинформация, анализ данных
- Потребительские права
- Образование и наука
- Технологии и правосудие
- Технологии, Безопасность, Автомобили
- Энергетика и окружающая среда
- Личностное развитие
- Технологии и экономика
- Медиа и коммуникации
- Миграция и иммиграция
- Личностный рост
- Налоговая система
- Медиа и телевидение
- Интернет и телекоммуникации
- Технологии, Кибербезопасность
- Здоровье
- Социальные сети и карьера
- Политика и инфраструктура
- Предпринимательство
- Промышленность программного обеспечения
- СМИ и коммуникации
- Медиа и Общество
- Медицина и генетика
- Веб-разработка и дизайн
- Технологии, процессоры
- IT-индустрия
- Кинопроизводство и технологии
- Транспорт
- Текстовый анализ
- Технологии, дизайн интерфейсов
- Офисные приложения
- Технологии, Онлайн-сервисы
- Медицина и биотехнологии
- Общество и технологии
- Экономика и рынок труда
- Искусственный интеллект, программирование, аналитика
- Технологии, следствие
- Сетевые технологии
- Технологии и веб-разработка
- Программирование, Обучение, Практика
- Коммуникации и ИТ
- Технологии, Карьера, Экономика
- Технологии и транспорт
- Здравоохранение и медицина
- Технологии, Государственное управление
- IT-безопасность
- IT и разработка
- Финансы и экономика
- Социальные сети, Общество, Сообщества
- IT-разработка
- СМИ и политика
- Конфиденциальность и безопасность
- Экономика и политика
- Технологии и общественная жизнь
- Бизнес и этика
- Безопасность и защита информации
- Технологии, бизнес
- Интернет и цензура
- Государственное регулирование
- Игры, Технологии
- Технологии и оптимизация
- Технологии ИИ и машинного обучения
- Технологии, IT, карьера
- IT и программное обеспечение
- Право и преступность
- Криминал и Правоохранительные Органы
- Технологии и энергетика
- Нефтяная промышленность
- Социальные конфликты
- Преступность и безопасность
- Таможенная очистка
- Медиа и журналистика
- Технологии и разработка приложений
- Телекоммуникации
- Консалтинг и управление
- Управление человеческими ресурсами
- Онлайн-контент
- Психология и психотерапия
- Морская отрасль
- Психология и технологии
- Социальные проблемы
- Маркетинг и реклама
- Политика и власть
- Экономика и торговля
- Карьера и развитие
- Продуктивность и Управление Временем
- Технологии, Искусственный интеллект, Реклама
- Окружающая среда
- Здоровье и технологии
- Бытовая химия
- Правовая информация
- Юстиция
- Технологии и экология
- Социальные сети и безопасность
- Базы данных
- Политика и государственное управление
- Интернет и социальные сети
- Индустрия IT
- Технологии и программное обеспечение
- История и искусственный интеллект
- Рестораны и обслуживание
- Технологии и программирование
- Социология
- Телевидение и СМИ
- Психология
- Политика и бизнес
- Мобильные устройства
- Технологии и развлечения
- Экология и охрана окружающей среды
- Маркетинг и брендинг
- Медицинская индустрия
- Кибербезопасность и технологии
- Социальные сети и политика
- Развлечения
- ИТ и автоматизация