プロジェクトのサイズと要件によって異なります。
ユーザーに関するデータを、目的と要件が異なる2つのセットに分割できる1つの方法を見ることができます。
- 識別データ:ユーザー名、パスワードハッシュ、電子メールアドレス、最終ログイン時刻など
- ユーザー設定、最新のアクティビティ、ステータスの更新などを含むユーザープロファイルデータ
どちらのカテゴリにも該当するユーザーに関する属性がいくつかあることに注意してください(例:ユーザーの生年月日)。ただし、これら2つのセットの違いは、最初のセットが厳密に制御され、特定のワークフローを介してのみ変更できることです。たとえば、パスワードを変更するには既存のパスワードを入力する必要があり、電子メールを変更するには電子メールの検証が必要な場合があり、ユーザーがパスワードを忘れた場合に使用されます。
設定にはこのようなACLは不要であり、ユーザーが同意する限り、理論的にはユーザーまたは別のアプリケーションによって変更できます。アプリケーションが悪意を持って、またはバグのためにデータを破損したり、データを変更しようとすると、リスクは低くなります(他のセキュリティ対策が講じられていると仮定します)。しかし、通常、ユーザー名、パスワード、または電子メールユーザーの身元を推測したり、サービスを拒否したり、管理者のサポートコストを発生させたりするために使用できるためです。
したがって、通常、データは2種類のシステムに保存されます。
- 通常、IDデータはディレクトリまたはIAMソリューションに格納されます。
- 優先データはデータベースに格納されます。
ただし、実際には、人々はこれらのルールに違反し、どちらか一方を使用します(たとえば、ASP.NETメンバーシッププロバイダーの背後にあるSQLサーバー)。
IDデータが大きくなるか、それを使用する組織が大きくなると、さまざまな種類の問題が忍び込みます。たとえば、ディレクトリの場合、マルチサーバー環境のすべてのサーバーにパスワードの変更をすぐに複製しようとします。ただし、ユーザー設定には結果整合性のみが必要です。(FYI:これらは両方ともCAPS定理の異なる最適化です。)
最後に、ディレクトリ(特にonline / cloudディレクトリ)もOAUTHなどのプロトコルを使用して他のリソースのアクセストークンを発行します(たとえば、Facebook、Google、Microsoftアカウント、ADFSを検討してください)。データベースは非常に複雑な結合とクエリ構造をサポートしますが、ディレクトリは必要ありません。
詳細については、IDディレクトリとデータベースのいくつかの検索が役立ちます。
最終的には、サードパーティとの統合(およびそれらが使用しているもの)を含め、シナリオが将来どのようなものになるかが予想されます。プロジェクトが十分に含まれており、ユーザーIDデータを保護し、正しく認証できると確信している場合は、データベースを使用できます。それ以外の場合は、IDディレクトリを調査する価値があります。
DBを使用する場合、IMOは、1つのDBと2つのDBを使用すると、最終的にユーザーとアプリケーションの両方のアクセス制御になります。