В моем образовании мне говорили, что ошибочно предлагать пользователю фактические первичные ключи (не только ключи БД, но и все первичные средства доступа).
Я всегда думал, что это проблема безопасности (потому что злоумышленник может попытаться прочитать что-то не свое).
Теперь я должен проверить, разрешен ли пользователю доступ в любом случае, так есть ли другая причина?
Кроме того, поскольку мои пользователи в любом случае должны иметь доступ к данным, мне потребуется открытый ключ для внешнего мира где-то посередине. Теперь этот открытый ключ имеет те же проблемы, что и первичный ключ, не так ли?
Был запрос о том, зачем это делать, так что вот один. Имейте в виду, что речь идет о самом принципе, а не только о его применении в этом примере. Ответы на другие ситуации приветствуются.
Приложение (Web, Mobile), которое обрабатывает действия, имеет несколько пользовательских интерфейсов и, по крайней мере, один автоматизированный API-интерфейс для межсистемного взаимодействия (например, бухгалтерия хочет знать, сколько взимать с клиента, исходя из того, что было сделано). Приложение имеет несколько клиентов, поэтому разделение их данных (логически данные хранятся в одной и той же БД) является обязательным требованием системы. Каждый запрос будет проверен на достоверность независимо от того, что.
Активность очень тонкая, поэтому она находится вместе в каком-либо объекте контейнера, давайте назовем его «Задача».
Три варианта использования:
- Пользователь А хочет отправить Пользователя Б какой-то Задаче, поэтому он отправляет ему ссылку (HTTP), чтобы выполнить некоторую Активность там.
- Пользователь B должен выйти из здания, чтобы открыть задание на своем мобильном устройстве.
- Бухгалтерия хочет взимать с клиента плату за задание, но использует стороннюю систему учета, которая автоматически загружает задание / действие с помощью некоторого кода, который ссылается на REST-API приложения
Каждый из сценариев использования требует (или облегчает, если), чтобы агент имел какой-либо адресуемый идентификатор для Задачи и Действия.
ON UPDATE CASCADE
был создан для этого (специфичен для mysql?), хотя, если проблема заключается в безопасности, тогда проверка доступа должна выполняться на бэкэнде и в любом случае не доверять пользователю