2016-02-26 2 views
0

Я разрабатываю webapp, где каждый пользователь будет обращаться к своим собственным данным.Владение пользовательской базой данных в webapps

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

table project 
id | name 
0 | foo 
1 | bar 

table story 
id | name | effort 
1 | baz | 5 
2 | ex | 2 

Я могу думать 2 решений.

1) Обеспечить каждую таблицу с дополнительным user_id колонки, так что каждый данных связан с его владельцем

2) Настройка новой схемы базы данных для каждого нового пользователя

Лично я больше на 2) потому что он обеспечит более высокий уровень безопасности (не связанный с уровнем приложения).

Что было бы рекомендуемым способом и почему?

+1

Это зависит от вашего предполагаемого использования данных. Если у вас много запросов, которые объединяют данные для разных пользователей, вы пожалеете о создании отдельных схем. Если вы никогда этого не сделаете, отдельные схемы, вероятно, будут проще в целом. У вас будет больше работы, чтобы няни многих баз данных, но не много. –

+0

Спасибо. У вас есть опыт использования отдельных схем? Любые объективные данные об издержках на техническое обслуживание этого решения вызовут? – brazorf

+0

Я никогда не строил параллельные scemas, но меня вызвали, чтобы исправить базы данных, построенные таким образом. –

ответ

0

Решение 2 выглядит довольно экзотическим для меня. Это означает создание новых схем базы данных при каждом добавлении пользователя. Теперь, если у вас очень мало пользователей, а новые пользователи добавляются очень редко, это может быть осуществимо. Но если у вас есть много пользователей для размещения, вам понадобится автоматизм для создания этих схем на лету. Уверен, что это возможно, но вы оставите основания существующих инструментов и рамок, которые поддерживают ваше развитие. Например, Java Persistency API связывает Java-класс с таблицей и не поддерживает определение динамической базы данных.

Кроме того, у меня есть сомнения относительно уровня безопасности. В веб-приложении база данных «пользователь» не является фактическим пользователем пользователя за браузером, а сервером приложений, которому принадлежит соединение с базой данных для всей его среды выполнения. Следовательно, права доступа отдельных пользователей человека не обрабатываются базой данных, а приложением.

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