2012-06-19 2 views
0

Я создаю веб-приложение, в котором будет много пользователей. У каждого пользователя есть свой логин и пароль для доступа к приложению. Данные приложения будут храниться в базе данных.Правильный способ подключения пользователей к базе данных через приложение

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

Лучше создать много пользователей базы данных (учетных записей) или просто использовать мастер/root для подключения к базе данных из приложения?


Редактировать/Примечание. Пользователи приложения не будут иметь прямого доступа к базе данных. База данных находится на том же сервере приложения и не будет открыта для внешнего доступа.

+3

Пользователи не должны иметь доступ к самой базе данных, кроме как через ваше приложение. Сделать что-то иначе - это прибегнуть к катастрофе. –

+0

У них не будет доступа. База данных находится на одном сервере приложения. – ceklock

+0

@tecnotron физическое расположение серверов не является важным вопросом для ответа на ваш вопрос. –

ответ

2

Есть плюсы и минусы каждого.

Использование общей учетной записи службы для аутентификации в базе данных имеет то преимущество, что она позволяет более эффективно объединять соединения с базой данных. То есть соединения могут быть повторно использованы между пользователями, минимизируя иногда дорогостоящую работу по открытию нового соединения, что вам нужно будет сделать, если каждый пользователь будет аутентифицироваться отдельно. Определенный конфликт заключается в том, что вам нужно быть особенно осторожным в проверке любого SQL, который выполняется пользователем, поскольку разрешения на учетную запись должны быть способны сделать то, что должен сделать самый мощный пользователь системы.

Использование учетной записи для каждого пользователя дает вам больше гибкости при назначении разрешений для разных пользователей без необходимости реализации вашей собственной схемы авторизации в вашем приложении. Кроме того, он упрощает аудит системы, потому что вы знаете, кто подключен, когда вы проверяете соединения с БД. Наконец, этот подход может снизить вашу уязвимость до SQL-инъекции, поскольку вы можете заблокировать учетную запись каждого пользователя (предпочтительно, используя защиту на основе ролей на платформе БД), чтобы иметь возможность делать то, что пользователю нужно разрешить.

Так, например, если они каким-то образом вводят DELETE FROM UsersTable, вы заблокировали бы это, и команда с впрыском завершится неудачей, даже если она прошла через вашу логику проверки.

Существует еще одно соображение, если у вас есть пользователи, которые знают, как использовать инструменты баз данных (особенно MS Access) и имеют прямой доступ к серверу базы данных. Если вы используете модель авторизации для каждого пользователя, у вас могут возникнуть проблемы с безопасными пользователями, обходящими ваше приложение и работающими напрямую с базой данных. Если ваши пользователи - кучка программистов, вы можете пойти с общей учетной записью.

Используйте общую учетную запись службы для доступа к БД, если ваше приложение очень сильно загружено большим числом одновременно пользователей, совершивших небольшие транзакции.

Используйте учетную запись/схему пользователя, когда у вас меньше пользователей, подключающихся к системе одновременно или вам нужна дополнительная безопасность и/или лучший контроль над полномочиями на объекты.

+0

Я действительно хочу узнать, как я могу создать и добавить разные роли/разрешения для 1000 или более пользователей базы данных в прямом эфире. –

+0

Это зависит от вашего сценария использования. У меня есть приложения с 1000 пользователями, но редко более 50 зарегистрированных одновременно. Параллелизм более важен для рассмотрения, чем имена пользователей. – JohnFx

+0

Когда я прочитал ваш ответ, я понимаю, что сайт, такой как amazon.com, будет иметь по крайней мере 1 пользователь на вход пользователя. –

2

Стандартное решение - ваше приложение имеет один главный логин/пароль для подключения базы данных. Затем создать таблицу со столбцами, как это:

  • user_id
  • имя пользователя
  • password_encrypted
  • email_address
  • полномочия по

Обратите внимание, что пароли приносят проблемы безопасности, и вы должны либо используйте пакет для авторизации или зачитайте лот на субэлементе т. Не храните пароли пользователей в базе данных без сильного шифрования.

+0

Это то, о чем я думал: главный логин/пароль для подключения к базе данных. Но в базе данных может быть много пользователей, а некоторые с меньшими разрешениями. Я не знаю, лучше ли создавать много пользователей базы данных или просто использовать мастер (root) для подключения к базе данных и управления другими пользователями приложения, добавив их в виде строк на большой таблице пользователей. . – ceklock

+0

Ваше приложение вводит в действие разрешения. Использование разрешений на уровне базы данных, как правило, слишком громоздко и трудно масштабируется, обычно это делается не так. – Bryce

+0

Не каждое приложение должно масштабироваться в той же степени. Приложение Intranet может быть очень хорошо обработано с помощью модели прямой аутентификации. – JohnFx

Смежные вопросы