170 похожих чатов

Всем привет! Кто какие айди использует для объектов в бд? Мы

раньше использовали в postgres просто Integer c autoincrement (это primary key, на него настроены foreign keys' с других таблиц)
Но есть проблема, так как айди легко угадать, можно просто перебрать все айди от 1 до X, и получить информацию о всех объектах (по специфике работы необходим публичный доступ к одному из объектов по айди, это окно оплаты)
Сейчас мы планируем использовать просто айди типа String, созданные из питона через модуль secrets

Есть ли какие-то минусы такого подхода, или в данном случае действительно лучше не сделаешь?

21 ответов

15 просмотров

Для такой задачи существует uuid

Алексей- Автор вопроса
Artyom 🇷🇺
Для такой задачи существует uuid

Но ведь это все равно строка, и по идее все, что меняется, это метод генерации, а в нашем случае токен, созданный через secrets лучше, чем uuid

минусов никаких нет, просто нужнен инсерт с while true и генерацией нового айди на ошибку

Алексей- Автор вопроса
fishsouprecipe 👉👈
минусов никаких нет, просто нужнен инсерт с while ...

А точно нужен? Через secrets вроде же гарантированно криптографически уникальный токен

Алексей
А точно нужен? Через secrets вроде же гарантирован...

А можешь сказать что именно в secrets юзаешь, посмотрю срц. Но что-то мне подсказывает, что такое невозможно)

А если и uuid угадают? Нужна авторизация + проверка на возможность доступа к данным у авторизованного пользователя.

Посмотрите на UUID.

Алексей- Автор вопроса
Makc Belousow
А если и uuid угадают? Нужна авторизация + проверк...

Но шанс угадать uuid/уникальный в разы меньше, чем просто перебрать число в диапазоне

Алексей
Но шанс угадать uuid/уникальный в разы меньше, чем...

если тебе нужен ограниченный доступ, то тут только authorization, зачем полагаться на рандом

Алексей- Автор вопроса
fishsouprecipe 👉👈
если тебе нужен ограниченный доступ, то тут только...

Нет, не ограниченный доступ. Система авторизации с OAuth scopes есть, там все нормально (токены авторизации тоже через secrets создаются, не uuid же для них использовать) Просто есть окно оплаты, где пользователь условно открывает example.com/i/{someid} Ну и для оплаты понятное дело не нужно авторизироваться, поэтому доступ к конкретному одному объекту (ладно, двум)) по айди открыт Все остальное защищено авторизацией Вот поэтому и нужно что-то более-менее нормальное для URL, базы и сложное для подбора Насчет UUID или secrets, я наверное выберу secrets Но все же исходный вопрос: primary key в таблице лучше делать строкой, или все же числом?

Из минусов, secrets может быть долгий. Попробуйте померить скорость генерации uuid4 и ваших строчек через secrets. Вдруг это будет существенно.

Алексей
Нет, не ограниченный доступ. Система авторизации с...

О. недавно платил, через какую-то кассу, там айди платежа был uuid4

Алексей- Автор вопроса
fishsouprecipe 👉👈
О. недавно платил, через какую-то кассу, там айди ...

Я смотрю наших примерные аналоги, у них явно не uuid, а что-то похожее на secrets

я использую ULID - Universally Unique Lexicographically Sortable Identifier, в бд (postgres) храню как uuid4

Алексей- Автор вопроса
Alexey
я использую ULID - Universally Unique Lexicographi...

Звучит интересно, спасибо, посмотрю

Алексей- Автор вопроса
Oskar Sharipov
Из минусов, secrets может быть долгий. Попробуйте ...

Хм, возможно и так. В данный момент разницы нет, но может в будущем будет влиять. uuid генерируется примерно в 21 раз быстрее

Алексей- Автор вопроса
fishsouprecipe 👉👈
кажется нужно переписать на го)

Не) Ну пока неизвестно что лучше, буду думать, может ещё кто напишет. Но уже точно решил, что это будут строки, не числа)

fishsouprecipe 👉👈
кажется нужно переписать на го)

И там обращения к системному ГПСЧ будут долгими.

Похожие вопросы

Обсуждают сегодня

А чем вам питонисты не угодили?😂
.
79
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
Ещё такой вопрос. Мне необходимо хранить пароль пользователя локально. Для этого планирую использовать ini файл. Это для автозаполнения полей логин и пароль при авторизации. Е...
Евгений
19
Ты просто гитлеровскую эстетику плохо понимаешь. Он же всё под Цезаря делал. А это как бы запрещённый приём в политике. Пиджаки они зачем все носят? Чтобы показать что они тип...
Ivan Kropotkin
4
а чем лучше всего сделать глобальный лок, если много нодов, до сотни? ну то есть мне надо, чтобы некоторые операции с объектом не происходили одновременно. перемещение между н...
Д. П.
15
Hi guys, I'm looking for a good LLM course. Is there any course to learn LLMs in advanced? I'm aiming to use them in my apps, so a perfect course in my openion, is not only a ...
Taha
14
А как лучше конвертировать физический адрес в виртуальный при маппинге? В случае ядра у меня, например, direct mapping, первые 768МБ я как есть мапплю в higher half, а остальн...
Evg Resh
26
База данных не поможет. Шифрование не поможет. Какие там ещё варианты? Накидывайте.
КТ315
20
А табстоп это сообщение от окна или от элемента управления?
The Bird of Hermes
18
Легче писать на C++ чем на C, если полностью не изучать C++, а знать только основное?
Алмаз
8
Карта сайта