Webアプリケーションのユーザーパスワードを安全に保存する方法を尋ねる質問がときどきあります(RDBMSを使用して、私はFacebookやTwitterについて話していません)。通常の答えは、「パスワードをソルト化してから、TDESやSHA512などの強力なアルゴリズムでハッシュする」です。
私の質問は次のとおりです。RDBMSユーザーとして、ほとんどのエンジンには認証メカニズムが組み込まれているため、パスワードの保存にまったく問題がないのはなぜですか。
たとえば、一部のユーザーXが自分のWebアプリケーションでアカウントユーザーパスワードYを作成したい場合、次のクエリを間違って発行するとどうなりますか。
CREATE USER X WITH ENCRYPTED PASSWORD Y IN GROUP baseuser;
次に、私のアプリケーション内で、ユーザーは自分の資格情報を使用してデータベースへの接続を開くことができ、パスワード管理のすべてに煩わされる必要はありません。
この方法にはいくつかの利点があります。
- 暗号化アルゴリズムを変更する必要があるとRDBMSが判断した場合、セキュリティ更新を適用するだけで、何もする必要はありません。
- ユーザーの承認を管理するのは簡単です。ユーザーが管理者の役割に昇格された場合、ユーザーを対応するグループに追加するだけです。
- SQLインジェクションは無意味になりました。データベース内の各ユーザーに許可したいものを正確に許可する権限を管理しているためです(たとえば、SOのようなフォーラムで、新しい投稿の追加、投稿への回答、コメントおよび自分の質問の編集/削除)。 / answers / comments);
- ユーザーアカウント "匿名"は、アプリケーションへの認証されていない接続に使用できます。
- 各ユーザーは、提供したデータの所有者です。
しかし、このトピックに関して私が見るほぼすべての質問について、これは物事を実行する方法ではないという一般的なコンセンサスがあるようです。私の質問は:なぜですか?
注:三点目は、によって許可されたポリシー PostgreSQLで、かつセキュリティポリシーのMicrosoft SQL Serverのインチ これらの概念は新しいものであることがわかりましたが、とにかく、ここにあるので、ここで説明する手法がユーザーアカウントを処理する標準的な方法にならないのはなぜですか。