Это зависит от размера и требований вашего проекта.
Я вижу один способ, которым данные о пользователях могут быть разделены на два набора с различными целями и, следовательно, требованиями:
- Идентификационные данные: имя пользователя, хэш пароля, адрес электронной почты, время последнего входа в систему и т. Д.
- Данные профиля пользователя, которые включают предпочтения пользователей, последние действия, обновления статуса и т. Д.
Обратите внимание, что есть некоторые атрибуты о пользователе, которые могут попадать в любую категорию (например, дата рождения пользователя). Разница между этими двумя наборами заключается в том, что первый жестко контролируется, и его можно изменять только с помощью определенных рабочих процессов. Например, изменение пароля может потребовать предоставления существующего пароля, изменение электронной почты может потребовать проверки электронной почты, и это будет использоваться в случае, если пользователь забудет пароль.
Предпочтения не требуют таких ACL, и теоретически могут быть изменены пользователем или другим приложением, если пользователь согласен на это. Ставки низки, если приложение злонамеренно или из-за ошибки повреждает данные или пытается изменить их (при условии, что предпринимаются другие меры безопасности). Однако, как правило, может быть катастрофическим, если какое-либо имя пользователя, пароль или адрес электронной почты могут быть изменены так как они могут быть использованы как для подтверждения личности пользователя, так и для отказа в обслуживании, или вызвать расходы на поддержку и т. д. для администратора.
Таким образом, обычно данные хранятся в двух типах систем:
- Идентификационные данные обычно отправляются в каталог или решение IAM.
- Данные о предпочтениях окажутся в базе данных.
Сказав, что на практике люди будут нарушать эти правила и использовать один или другой (например, SQL-сервер за провайдером членства ASP.NET).
По мере того как идентификационные данные становятся больше или организация, которая их использует, становится все больше, возникают различные типы проблем. Например, в случае с каталогом, он попытается немедленно скопировать изменения пароля на все серверы в многосерверной среде. Тем не менее, пользовательские настройки требуют только согласованности. (К вашему сведению: оба они являются разными оптимизациями теоремы CAPS.)
Наконец, каталоги (особенно онлайн / облачные каталоги) также будут выдавать токены доступа для других ресурсов, использующих протоколы, такие как OAUTH (например, рассмотрим Facebook, Google, учетную запись Microsoft, ADFS), тогда как в базе данных такой необходимости нет. База данных будет поддерживать довольно сложные объединения и структуру запросов, в которых каталог не нужен.
Для более подробной информации, несколько поисков в каталоге идентичности против базы данных могут помочь.
В конечном итоге все сводится к тому, каковы ваши сценарии и какие будут в будущем, включая интеграцию с любыми третьими сторонами (и что они используют). Если это содержательный проект, и вы уверены, что можете защитить данные идентификации пользователя и выполнить аутентификацию правильно, тогда вы можете перейти к базе данных. В противном случае, возможно, стоит изучить каталог идентификации.
Если вы перейдете к БД, IMO, используя одну БД против двух, в конечном итоге перейдет к управлению доступом, как для пользователей, так и для приложений.