Как стартер: вы должны управлять уровнем авторизации в вашем приложении; каждый пользователь должен пройти проверку подлинности, и права доступа проверяются при попытке доступа к хранимым данным.
При этом добавление некоторого запутывания поверх этого также не является плохой вещью. Ваш вариант использования выглядит как хорошее место для использования UUID()
или UUID_SHORT()
.
Эти функции создают уникальные, непредсказуемые идентификаторы, которые, как вам кажется ищем. Вы можете просто использовать столбец UUID вместо первичного ключа.
Недостатком является то, что вычисление этого ключа с автоинкрементным вычислением обходится дороже, и что нет никакой возможности сгенерировать значение по умолчанию в запросах insert
.
create table email_invoice (
id varchar(36) primary key,
email_id int,
invoice_id int
);
insert into email_invoice(id, email_id, invoice_id) values(uuid(), 1, 2);
Демонстрация на DB Fiddle :
id | email_id | invoice_id
:----------------------------------- | -------: | ---------:
b86d0d8b-7022-11ea-8095-00163e561f6d | 1 | 2
Вы также можете создать Триггер before
, который назначает uuid()
для каждой вставки, поэтому вам не нужно беспокоиться о вызове функции в самом операторе.