自分のアプリケーション用に考え出したセキュリティ モデルについて、ベスト プラクティスのフィードバックをいただければ幸いです。Amazon の RDS を使用して、Microsoft Access フロントエンド/バックエンドを .NET WinForms/SQL Server にアップグレードすることに真っ先に飛び込みます。アプリケーションはマルチ ユーザー、マルチ サイト (異なるドメイン) であり、機密性の高い健康情報が含まれます。
これは 2 週間の調査の要約です。
混合認証と SSL を使用してアプリケーションに保存された暗号化された接続文字列。理想的ではありませんが、接続文字列が盗まれても大丈夫な方法を見つけたと思います (以下の #5 を参照)。
SQL Server は、選択した IP アドレスからの接続のみを受け入れます (すべて静的になります)。
実行権限のみを持つ 1 人の SQL Server ユーザーに割り当てられたアプリケーション接続文字列。すべての DB 対話は、プロシージャーを使用して行われます。アプリケーション ユーザーを特定のプロシージャに制限するために使用されるスキーマ アクセス許可。
SHA 256 ソルト化およびハッシュ化されたパスワードを含むユーザー テーブル。これにより、アプリケーション セキュリティの最初のレイヤーが提供されます。
これは私が確信していない部分です: すべての手順は、exec 変数の 1 つとして送信されたユーザー名とパスワードを検索する IF ステートメント = True の場合にのみ完全に実行されます。UN/PW は、アプリケーションのセッションごとに一時的に保存されます。私の理論的根拠は、これにより、許可されたIPアドレスから何らかの形でログインしている接続文字列を持つユーザーが、有効なパスワードなしでデータを取得/変更できないようにすることです。
AES_256 対称キーで暗号化された機密性の高い列は、データベース マスター キーを使用する証明書によって暗号化されます。アプリケーション ユーザーには、対称鍵と証明書を使用する権限があります。
ユーザーのパスワードは、規則 (長さ、大文字と小文字の組み合わせ、特殊文字) に従う必要があります。
誰かがこれに穴を見たり、良い代替品を持っていますか? #5 は、Windows 認証を使用できない Windows アプリケーションに固有の接続文字列のセキュリティ ホールを解決しますか?