Должен ли каждый пользователь получать свою собственную базу данных пользователя / пароль, когда они используют одно приложение? - PullRequest
2 голосов
/ 13 мая 2011

То, что я пытаюсь спросить, это ...

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

Я все еще разрабатываю приложение, поэтому в настоящее время оно входит в систему как пользователь root без пароля. Очевидно, я это изменю, но какова лучшая практика? Должен ли я иметь единого пользователя базы данных и пароль, который использует приложение, или мне следует создавать отдельного пользователя для базы данных каждый раз, когда пользователь для приложения создается (или изменяется)? Последнее похоже на большую работу.

Ответы [ 3 ]

3 голосов
/ 13 мая 2011

Ваше приложение должно иметь отдельные идентификаторы и пароли для каждого пользователя. Учитывая это, у приложения нет причин иметь несколько идентификаторов пользователей при обращении к базе данных. Пока безопасность приложения реализована правильно, использование нескольких идентификаторов пользователей БД не дает никакой выгоды.

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

Единственное исключение, о котором я могу подумать, это если бы вы позволили какой-то общий доступ к базе данных. В крайнем случае, если у вас есть экран, на котором пользователь может ввести произвольный запрос SQL, который вы затем выполните. В этом случае теоретически вы можете заставить приложение анализировать запрос и пытаться применять правила безопасности, но для этого потребуется, чтобы ваше приложение внедрило очень много знаний о SQL. В этом случае лучше назначить каждому пользователю свой собственный идентификатор пользователя БД и поместить правила безопасности в ядро ​​базы данных.

2 голосов
/ 13 мая 2011

Краткий ответ: До интернета да. После интернета: никто этого не делает, но все равно это вполне приемлемо.

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

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

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

0 голосов
/ 13 мая 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...