イントラネット アプリケーションのデータベース認証
-
09-06-2019 - |
質問
内部 Web アプリケーションからデータベース層までのエンドツーエンド認証のベスト プラクティスを探しています。
私が見た最も一般的なシナリオは、アプリケーションに必要な権限が設定された単一の SQL アカウントを使用することです。このアカウントはすべてのアプリケーション呼び出しで使用されます。その後、ユーザーがクエリ ツールなどを介してデータベースにアクセスする必要がある場合、クエリ アクセスを持つ別のグループが作成され、ユーザーにはそのグループへのアクセスが与えられます。
私が見たもう 1 つのシナリオは、完全な Windows 認証をエンドツーエンドで使用することです。したがって、ユーザー自体はすべての権限が設定されたグループに追加されるため、ユーザーはアプリケーションのパラメータの外で更新および変更を行うことができます。これには通常、テーブルを直接更新しないように、適切なストアド プロシージャまでユーザーを保護することが含まれます。
最初のシナリオは保守が比較的簡単に見えますが、アプリケーションにセキュリティ ホールがある場合、データベース全体が危険にさらされるという懸念が生じます。
2 番目のシナリオはより安全に見えますが、データベース上のストアド プロシージャに多くのビジネス ロジックが必要になるという逆の懸念があります。これにより、Nhibernate や LINQ などの非常に優れたテクノロジの使用が制限されるようです。しかし、今日では人々が非常に多くの異なる方法でデータを使用できるため、私たちが予測していません。マッシュアップなどはこれが最良のアプローチです。
解決
デール - まさにその通りです。これらのユーザーに基盤となるデータ ストアへのアクセスを提供したい場合は、サービスを介してそれを実行します。私の経験では、大学や大学を出て来た経験豊富なコンピュータ ユーザーが最も大きな損害を与えます。ことわざにあるように、彼らは危険であることを十分に知っています。
仕事の一部を自動化したいと思っていて、必要な知識があるとアピールできる場合は、進んで許可してください。 ドメインアカウント バックエンドへのアクセス。そうすることで、小さな VBA 自動化を介して行うすべての操作がアカウントに関連付けられ、データが収集されたときに誰を確認すればよいかが正確にわかります。
私の基本的なポイントは、データベースはアプリケーションの聖杯であるということです。その特定のパイにはできるだけ少ない指が必要です。
コンサルタントとして、誰かが一般ユーザーのデータベースへのアクセスを許可したと聞くといつも目が輝きます。それを修正するために呼び出されたときに、最終的には高額な給料になることがわかっているからです。
他のヒント
個人的には、通常のエンド ユーザーをデータベースに入れたくありません。イントラネット アプリケーション (特にドメイン上に存在するアプリケーション) の場合は、アプリケーションが機能するために必要な権限のみを持つデータベースへのアプリケーション アクセス用の単一アカウントを提供します。
アプリケーションへのアクセスは、ユーザーのドメイン アカウントを介して制御されます (IIS での匿名アクセスをオフにするなど)。
もし ユーザーはデータベースに直接アクセスする必要があり、それを正当化できます。 ドメインアカウント データベースへのアクセス権が与えられ、適切なツールを使用して DBMS にログインできます。
私は過去 1 年間、いくつかの社内 Web アプリケーションの開発を担当してきました。
私たちのソリューションは Windows 認証 (Active Directory または LDAP) を使用していました。
私たちの目的は、既存の企業 ID/パスワードを使用して簡単にログインできるようにすることだけでした。また、既存の部門が今後もアクセス許可の検証と管理を担当するようにしたいとも考えました。
Nhibernate や LINQ に関する議論には答えることはできませんが、これらが実装できる特定のキラー機能がない限り、Active Directory や LDAP は実装と維持が十分に簡単なので、試してみる価値はあります。
Stephen - 一般のエンド ユーザーをデータベースから遠ざけるのは良いことですが、経験豊富なコンピューター ユーザーが大学から多く出てくるこの時代に、これが正しい道なのかどうか疑問に思っています。誰かがデータベースへの VBA 更新を含むジョブの一部を自動化したい場合、私は通常のアプリケーション経由での実行を許可していますが、このようにアクセスを制限することで利益を失うことになります。
ここで暗示されているもう 1 つの方法は、サービス経由でアプリケーションを開き、グループ経由でそれらのサービスを保護しながら、ユーザーをデータベースから分離したままにすることができるということだと思います。
次に、ジョナサンの投稿に従って、委任を介して、部門がグループを介して自分のアカウントへのアクセスを制御できるようにすることができます。