現在のイントラネット環境は少し古くなっています。現在のスタックには、SQL 2000 データベースに対してクエリを実行する ASP.NET 1.1/2.0 アプリケーションがあります。
役割のセキュリティのために、ユーザーが追加されるサーバーにはユーザー グループがあります (そのため、テスト マシンと運用マシンのグループに追加する必要があります)。これらのユーザー グループは、SQL 2000 自体のユーザー ロールに同期されます。アクセス違反を防止するために、必要に応じてストアド プロシージャへの実行権限がロールに付与されます。
Web アプリケーション レベルでは、基本認証 (Active Directory に対して認証) を使用し、ID の偽装を有効にします。データベースへの接続文字列は統合セキュリティを使用します。これにより、ユーザーがログインしたときに Web アプリケーションがデータベースに接続する環境が作成され、呼び出されるストアド プロシージャにデータベース セキュリティが適用されます。また、典型的な User.IsInRole() メソッドを使用して、アプリケーション自体内で承認を実行することもできます。
これにはいくつかの問題があります。1 つ目は、サーバー管理者のみがマシン上のユーザー グループにアクセスできるため、ロール セキュリティの更新やユーザーの追加は、アプリケーション管理者の手に負えません。さらに、ロールを取得する唯一の方法は、SQL 2005 でロックダウンされている「xp_logininfo」という SQL プロシージャを呼び出すことでした。完全な詳細はわかりませんが、DBA によると、この一般的なモデルは機能しないとのことです。新しいバージョンのスキーマの性質を考えると、SQL 2005 に適しています。
これで、環境を更新する準備が整いました。AJAX をさらに活用するために .NET 3.5 アプリを作成しており、SQL Server 2005 がデータベースの主要な環境です。セキュリティ モデルも更新して、アプリケーション管理者にとってもう少し柔軟にし、Active Directory をさらに活用できるようにすることを検討しています。
また、特定のユーザーが複数のアプリケーションにアクセスできる可能性が高いという懸念もあります。そのため、必要に応じてユーザーを簡単に削除できるように、何らかの集中型ソリューションを用意することが最適です。
この種の環境で役割のセキュリティを維持するためのベスト プラクティスは何ですか?