Я не думаю, что на этом есть серебряная пуля - хотя есть некоторые вещи, которые вы можете сделать.
Во-первых, в вашем новом проекте можно использовать другого пользователя MySQL и запретить этому пользователю «выбирать» права на таблицы, доступ к которым возможен только через объединения с таблицей «пользователи». Затем вы можете создать представление, которое объединяет две таблицы, и использовать его всякий раз, когда вы запускаете запросы "select". Таким образом, если вы забудете запрос, он произойдет эффектно, а не тихо. Конечно, вы также можете ограничить вставку, обновление и удаление таким способом - хотя это намного сложнее с представлением.
Редактировать
Таким образом, если ваше приложение в настоящее время подключается как «web_user», вы можете отменить выборочный доступ к таблице проектов у этого пользователя. Вместо этого вы должны создать представление «projects_for_users» и предоставить полномочия «выбрать» для этого представления новому пользователю - «фотографу», возможно. Новый пользователь также не должен иметь права доступа к «проектам».
Затем вы можете пошагово переписать доступ приложения к данным, и вы будете уверены, что поймали каждый случай, когда ваше приложение выбирает проекты, потому что оно взорвалось бы при попытке получить данные - ни один из ваших пользователей будет иметь права «выбирать» в таблице проектов.
В качестве небольшого побочного бонуса - разрешение на выбор также требуется для обновлений с предложением where, поэтому вы также сможете найти случаи, когда приложение обновляет таблицу проекта, не будучи переписанным.
Во-вторых, вы хотите подумать о процессе обеспечения - как вы предоставите доступ к системе новым пользователям? Кто это делает? Опять же, разделив пользователя базы данных, который может вставлять записи в «пользователей», вы можете избежать глупых ошибок, когда страница в вашей системе делает больше, чем вы думаете. В такой системе обычно есть несколько шагов, которые составляют процесс обеспечения. Убедитесь, что вы отделяете привилегии для этих задач от привилегий обычного пользователя.
Редактировать
Предоставление - это слово для настройки службы для нового пользователя (я думаю, что это происходит из мира телефонии, где телефонные компании будут говорить о предоставлении новой услуги на существующей телефонной линии). Обычно он включает в себя целую кучу бизнес-процессов - и каждый шаг в этом процессе должен быть успешным, чтобы начать следующий. Таким образом, в вашем приложении вам может потребоваться настроить новую учетную запись пользователя, проверить его адрес электронной почты, настроить пространство для хранения и т. Д. Каждый из этих шагов должен рассматриваться как шаг в процессе, а не просто как одна задача.
Наконец, пока вы делаете это, вы также можете думать о разных уровнях привилегий. Будет ли ваша система заслуживать различных типов пользователей? Фотографы, которые могут загрузить работу, рецензенты, которые не могут? Если это возможное расширение функции, возможно, вы захотите создать поддержку для этого сейчас, даже если единственным типом пользователя, которого вы поддерживаете при запуске, является фотограф.