Создание разных пользователей для каждой проблемы моего приложения!
Я хочу создать свой сайт, и на странице есть так, чтобы на страницах форума использовался пользователь форума mysql, имеющий права на mydb.forum_table, mydb_forum_table2. и страницу профиля, чтобы использовать пользователя профиля, имеющего доступ к mydb.users и mydb.profiefields и т. д. с фотогалереей, блогом, чатом и... это правильный способ сделать это! Я думаю о принципе наименьших привилегий, но мне интересно, почему я не видел, чтобы другие известные CMS делали это!
2 ответа
Одним из важнейших ресурсов для базы данных являются соединения. Как правило, базы данных настроены с максимальным количеством соединений, и каждый раз, когда процесс должен сделать запрос, ему нужно соединение для этого. Соединения с базой данных являются дорогостоящими объектами для создания - они требуют времени и памяти, и, самое главное, соединения устанавливаются для конкретного пользователя. Общепринятая "лучшая практика" для веб-приложений - для приложения, когда ему требуется соединение с базой данных, для проверки пула на наличие доступного соединения. Если в пуле есть свободное соединение, веб-приложение получит это соединение, использует его по мере необходимости, а затем возвращает его в пул для повторного использования. Если свободных соединений нет, приложение создаст новое, использует его, а затем помещает в пул для повторного использования.
Если вы имеете дело с приложением, которое использует несколько пользователей базы данных (для управления привилегиями), и вам необходимо использовать пул соединений, ваше приложение должно будет создать много пулов (по одному для каждого пользователя), что обычно приводит к тому, что ваше приложение получает как минимум одно соединение для каждого пользователя базы данных, которое оно использует. Это неэффективно, подвержено ошибкам и излишне сложно.
Если вы действительно намерены ограничить доступ вашего приложения к данным, то вам, вероятно, следует выяснить, насколько сильно ваша база данных поддерживает представления. Если представления хорошо поддерживаются, то вы можете создать представление (или представления), которые настроены для нужд любой конкретной части вашего приложения.
Я бы порекомендовал придерживаться одного пользователя базы данных, а затем использовать время, которое вы только что освободили, для дополнительной отладки вашего приложения. Вы получите лучшие результаты и усугубите меньше администраторов баз данных.
Если я правильно понимаю, вопрос заключается в реализации контроля доступа модуля на основе разрешений для таблиц, которые используются модулем.
Я думаю, что его было бы сложно поддерживать (связь между модулями и таблицами), и медленно приходилось проверять разрешения для каждой таблицы, к которой обращается модуль.