データベースへのアクセスが制御されたアプリケーション (または Web サービス) を介してのみ許可されている場合、多くの場合、すべてのアプリケーションアカウントに対して1 つのデータベース アカウントが使用されます。これは、一元化されたユーザー管理のない環境で特に当てはまります。AD 上の SQL Server (たとえば、SharePoint の場合など) では、統合認証を使用することが実用的な場合があります。
理由は簡単です。
データベース アカウントをアプリケーション アカウントと同期しようとするのは悪夢です。また、アプリケーションがすべての SQL データ アクセスとクエリを制御するため (つまり、直接ログインがないため)、データベース アクセス レベルに関してユーザー A をユーザー B から分離する必要はほとんどありません。
この構成では、アプリケーションがユーザー アクセスの認証、承認、および識別を担当します。
そうは言っても、さまざまなレベルのアクセス権を持つさまざまなデータベース アカウントを持つことは良いことです。これらは次のようになります。
- app_user; 通常のアプリケーション ユーザーが行う必要があるすべてのことを行うことができます。不変の設計では、これにより、ほとんど/すべてのテーブルに対する削除/更新アクセスが除外される場合があります。さまざまなタイプの「通常の」ユーザー用に別のアカウントを作成したというケースにまだ遭遇したことはありません。繰り返しますが、この時点では、アクセスの責任はアプリケーションにあります。
- app_admin; app_user ができるすべてのことを実行でき、高レベルの管理者のみが持つべき特別なテーブルへの [更新] アクセス権を持っています。これは、実行中のアプリケーションの「ルート」アカウントです。このアカウントではスキーマの変更を許可しないでください。これは、ほとんどのアプリケーションの「ライブ」の側面ではありません。
- データベース管理者; まあ、データベースを変更できる人。重要なことは、このアカウントを使用してアプリケーションから接続しないことです。これは開発者/SA アカウントです。スキーマの変更を含め、すべてを行うことができます。
マルチテナント アプリケーションの場合、テナントごとに "app_user" アカウント (および場合によってはスキーマまたはデータベース) が存在する場合があります。
まだ別のオーセンティケーターを展開しているように聞こえるので、salt (大きなランダム) + ハッシュ (bcrypt/scrypt/pbkdf2 - no sha!)を正しく実装するために時間をかけてください。または、外部オーセンティケータまたは既存の精査済みライブラリを検討してください。そして、いつものように、プレースホルダーを使用してください。