SQL Server、Internet Information Server、および ASP.NET エンジンはすべて、適切に連携して機能する強固なセキュリティ モデルを提供します。ユーザー データとアプリケーションを安全に保つために、Microsoft は各サービスのデフォルト設定をかなり低い値に設定しています。
ほとんどの開発者が直面する課題は、SQL Server、IIS、および ASP.NET を使用して、他の人が簡単に侵害できるセキュリティ ホールを残さずに、アプリケーションとデータ間の適切なレベルの信頼を設定する方法です。 3 種類のサービス (SQL Server、IIS、ASP.NET) が関係するため、ソリューションのセキュリティを確保するには 3 つの重要な手順を実行する必要があります。このセクションでは、Web アプリケーションに適切なアクセス許可と信頼レベルを設定する、より一般的な (そして信頼できる) 方法の 1 つについて説明します。
DotNetKB カスタム IIS ユーザー アカウントを定義する
Web アプリケーションを保護する最も安全な方法は、アクセス許可が制限されたカスタム ユーザーを定義し、Web アプリケーションの実行時にカスタム ユーザーとして実行されるように IIS を構成することです。これは実装が非常に簡単で、Web アプリケーションへのすべての訪問者が、必要なアクセス許可のみを持つようになります。
最初の手順では、新しい Windows ユーザー (この例では DotNetKB という名前) を生成し、そのユーザーに強力なパスワードを設定して、それを Windows ゲスト グループ (ゲスト Windows グループ) に追加します。また、「パスワードを無期限にする」チェックボックスと「ユーザーはパスワードを変更できない」チェックボックスが選択されていることを確認してください。これにより、IIS で Web アプリケーションを実行するときに ID として使用できる、限定された特権を持つユーザーが生成されます (図 1 を参照)。
次に、Internet Information Server Administrator を呼び出し、これらのページをホストする Web アプリケーションを選択します。この例では、前に生成したテスト ページをホストする Web アプリケーション (DotNetKB_WebSite) を選択できます。ツリー ビューで Web アプリケーションを右クリックし、コンテキスト依存メニューから [プロパティ...] を選択します。次に、[ディレクトリ セキュリティ] を選択し、ダイアログ ボックスの [匿名アクセスと認証制御] セクションで [編集] ボタンをクリックします。最後に、カスタム ユーザー名 (DotNetKB) を入力し、[IIS によるパスワード制御を許可する] チェックボックスをオフにして、カスタム ユーザー アカウントのパスワードを入力します。この作業をすべて完了したら、「OK」ボタンをクリックして、これらの変更を IIS 構成データベースに保存します (図 2 を参照)。
[カットページ]
この時点で、IIS は、権限が制限されたカスタム アカウントで実行されます。アプリケーションの Web ページを訪問する訪問者はすべて、このカスタム ユーザーとして実行され、そのカスタム ユーザーに対する認証権限のみを持ちます。
DotNetKB ユーザー アカウントに SQL Server へのアクセスを許可する
次に、データベース (DotNetKB) にアクセスするための適切な権限をカスタム ユーザーに付与する必要があります。これを行うには、Microsoft SQL Server Enterprise Manager を使用するか、カスタム スクリプトを作成してそのようなユーザーを作成し、そのユーザーに特定のオブジェクトへのアクセスを許可します。この記事では、SQL Server Enterprise Manager を使用してこれを行う方法について説明します。
注: Visual Studio .NET 2003 には SQL Server と互換性のある強力な統合機能が多数ありますが、Visual Studio .NET 2003 内からユーザーとユーザー権限を簡単に管理することはできません。大規模な組織やチームでは、これらの高度なタスクは通常、データベース管理者によって実行されます。 したがって、SQL Server Enterprise Manager を起動した後、以下の手順に従ってカスタム ユーザー (DotNetKB) をデータベースに追加できます。
·左側のツリー ビューでノードを展開し、DotNetKB データベースを表示します。私のコンピュータでは、ツリー ビューは次のように構成されています。 コンソール ルート SQL Server グループ (ローカル) (Windows NT) データベース DotNetKB。
·次に、データベースの下の [ユーザー] ノードを右クリックし、[新しいデータベース ユーザー...] (新しいデータベース ユーザー...) を選択します。 [データベース ユーザー プロパティ - 新しいユーザー] ダイアログ ボックスが表示されたら、[ログイン名] ドロップダウン ボックスから (<新規>) を選択します。
· [SQL Server ログイン プロパティ - 新しいログイン] ダイアログ ボックスが表示されたら、[全般] タブを選択し、[名前] 入力ボックスに「DotNetKB」と入力します。 [Windows 認証] ラジオ ボタンが選択されていることを確認し、カスタム ユーザー アカウントが存在するコンピュータの名前を [ドメイン] ドロップダウン ボックスから選択します。次に、[データベース] ドロップダウン ボックスから [DotNetKB] を選択します。
·次に、[データベース] タブを選択し、ダイアログ ボックスの上部にあるリストで DotNetKB データベースを見つけて選択します。次に、ダイアログ ボックスの下部にあるリストでパブリック ロールが選択されていることを確認します。最後に、ダイアログ ボックスの下部にある [OK] ボタンをクリックして、変更を保存します。
次に、DotNetKB データベース内のすべてのストアド プロシージャとカスタム関数に実行権限を追加する必要があります。これを行うには、パブリック ロールにアクセス許可を付与するだけで済みます。 DotNetKB ユーザーにアクセス許可を付与すると、今後のログイン (これらのユーザーが DotNetKB へのアクセス権を取得したとき) で、ユーザーごとに新しいアクセス許可を追加することなくストアド プロシージャを実行することが容易になります。
DotNetKB データベース内のストアド プロシージャと関数に実行権限を付与する手順は次のとおりです。
·ツリー ビューで DotNetKB データベースの下の [ユーザー] ノードを強調表示すると、このデータベースのユーザーのリストが表示されます。 DotNetKB ユーザーを見つけてダブルクリックし、[データベース ユーザーのプロパティ] ダイアログ ボックスを開きます。
· パブリック ロールを強調表示 (選択) した状態で、[プロパティ...] ボタンをクリックして、[データベース ロールのプロパティ] ダイアログ ボックスを開きます。次に、「権限...」ボタンをクリックして、データベース オブジェクトと権限設定のリストを表示します。
ダイアログ ボックスの上部にある [データベース ロール] ドロップダウン リストでパブリック ロールを選択し、このデータベースに定義されているすべてのストアド プロシージャとカスタム関数を検索し (完全な名前を表示するにはダイアログ ボックスを展開する必要がある場合があります)、各項目の横にある「実行」チェックボックスを選択します。一部のシステム オブジェクトでは他のチェックボックスがオンになっている場合があります。これらのオプションは変更しないでください。
·最後に、すべての実行権限を設定した後、[OK]ボタンをクリックして変更を保存し、ダイアログ ボックスを閉じます。すべてのダイアログ ボックスが閉じるまで、[OK] ボタンを順番にクリックします。
この時点で、IIS のカスタム ユーザーが作成され、SQL Server でユーザーの対応するアクセス許可が設定されました。ここで、ASP.NET Web プロジェクトの構成を変更して、ASP.NET が SQL Server へのすべての呼び出しに同じユーザー アカウントを使用するようにする必要があります。
DotNetKB ユーザーになりすますように ASP.NET アプリケーションをセットアップする
IIS で実行される ASP.NET Web アプリケーションの確実で信頼性の高い構成を生成するための最後の手順は、IIS から Windows ユーザー ID を受け入れ、他のオペレーティング システム リソースへのアクセスに使用できるように ASP.NET Web アプリケーションを構成することです。 。これを行うには、ルートの web.config ファイルにコード行を入力するだけです。
変更された web.config ファイルは次のようになります。
<構成>
<システム.ウェブ>
...その他の要素...
<identity impersonate="true"/> <!-- IIS ユーザー ID を仮定します -->
...その他の要素...
</system.web>
</設定>
要素を追加し、mock 属性を true に設定するだけであることに注意してください。この情報は IIS によって提供されるため、ユーザー アカウントまたはパスワードを入力する必要はありません。つまり、他の人が構成ファイルを読み取ることができたとしても、Web アプリケーションの実行にどの ID 資格情報が使用されているかを判断することはできません。
この時点で、カスタム ユーザーが生成され、SQL Server と IIS にアクセスするための適切な権限が設定されました。
この時点で、IIS は、権限が制限されたカスタム アカウントで実行されます。アプリケーションの Web ページを訪問する訪問者はすべて、このカスタム ユーザーとして実行され、そのカスタム ユーザーに対する認証権限のみを持ちます。
DotNetKB ユーザー アカウントに SQL Server へのアクセスを許可する
次に、データベース (DotNetKB) にアクセスするための適切な権限をカスタム ユーザーに付与する必要があります。これを行うには、Microsoft SQL Server Enterprise Manager を使用するか、カスタム スクリプトを作成してそのようなユーザーを作成し、そのユーザーに特定のオブジェクトへのアクセスを許可します。この記事では、SQL Server Enterprise Manager を使用してこれを行う方法について説明します。
注: Visual Studio .NET 2003 には SQL Server と互換性のある強力な統合機能が多数ありますが、Visual Studio .NET 2003 内からユーザーとユーザー権限を簡単に管理することはできません。大規模な組織やチームでは、これらの高度なタスクは通常、データベース管理者によって実行されます。 したがって、SQL Server Enterprise Manager を起動した後、以下の手順に従ってカスタム ユーザー (DotNetKB) をデータベースに追加できます。
·左側のツリー ビューでノードを展開し、DotNetKB データベースを表示します。私のコンピュータでは、ツリー ビューは次のように構成されています。 コンソール ルート SQL Server グループ (ローカル) (Windows NT) データベース DotNetKB。
·次に、データベースの下の [ユーザー] ノードを右クリックし、[新しいデータベース ユーザー...] (新しいデータベース ユーザー...) を選択します。 [データベース ユーザー プロパティ - 新しいユーザー] ダイアログ ボックスが表示されたら、[ログイン名] ドロップダウン ボックスから (<新規>) を選択します。
· [SQL Server ログイン プロパティ - 新しいログイン] ダイアログ ボックスが表示されたら、[全般] タブを選択し、[名前] 入力ボックスに「DotNetKB」と入力します。 [Windows 認証] ラジオ ボタンが選択されていることを確認し、カスタム ユーザー アカウントが存在するコンピュータの名前を [ドメイン] ドロップダウン ボックスから選択します。次に、[データベース] ドロップダウン ボックスから [DotNetKB] を選択します。
·次に、[データベース] タブを選択し、ダイアログ ボックスの上部にあるリストで DotNetKB データベースを見つけて選択します。次に、ダイアログ ボックスの下部にあるリストでパブリック ロールが選択されていることを確認します。最後に、ダイアログ ボックスの下部にある [OK] ボタンをクリックして、変更を保存します。
次に、DotNetKB データベース内のすべてのストアド プロシージャとカスタム関数に実行権限を追加する必要があります。これを行うには、パブリック ロールにアクセス許可を付与するだけで済みます。 DotNetKB ユーザーにアクセス許可を付与すると、今後のログイン (これらのユーザーが DotNetKB へのアクセス権を取得したとき) で、ユーザーごとに新しいアクセス許可を追加することなくストアド プロシージャを実行することが容易になります。
DotNetKB データベース内のストアド プロシージャと関数に実行権限を付与する手順は次のとおりです。
·ツリー ビューで DotNetKB データベースの下の [ユーザー] ノードを強調表示すると、このデータベースのユーザーのリストが表示されます。 DotNetKB ユーザーを見つけてダブルクリックし、[データベース ユーザーのプロパティ] ダイアログ ボックスを開きます。
· パブリック ロールを強調表示 (選択) した状態で、[プロパティ...] ボタンをクリックして、[データベース ロールのプロパティ] ダイアログ ボックスを開きます。次に、「権限...」ボタンをクリックして、データベース オブジェクトと権限設定のリストを表示します。
ダイアログ ボックスの上部にある [データベース ロール] ドロップダウン リストでパブリック ロールを選択し、このデータベースに定義されているすべてのストアド プロシージャとカスタム関数を検索し (完全な名前を表示するにはダイアログ ボックスを展開する必要がある場合があります)、各項目の横にある「実行」チェックボックスを選択します。一部のシステム オブジェクトでは他のチェックボックスがオンになっている場合があります。これらのオプションは変更しないでください。
·最後に、すべての実行権限を設定した後、[OK]ボタンをクリックして変更を保存し、ダイアログ ボックスを閉じます。すべてのダイアログ ボックスが閉じるまで、[OK] ボタンを順番にクリックします。
この時点で、IIS のカスタム ユーザーが作成され、SQL Server でユーザーの対応するアクセス許可が設定されました。ここで、ASP.NET Web プロジェクトの構成を変更して、ASP.NET が SQL Server へのすべての呼び出しに同じユーザー アカウントを使用するようにする必要があります。
DotNetKB ユーザーになりすますように ASP.NET アプリケーションをセットアップする
IIS で実行される ASP.NET Web アプリケーションの確実で信頼性の高い構成を生成するための最後の手順は、IIS から Windows ユーザー ID を受け入れ、他のオペレーティング システム リソースへのアクセスに使用できるように ASP.NET Web アプリケーションを構成することです。 。これを行うには、ルートの web.config ファイルにコード行を入力するだけです。
変更された web.config ファイルは次のようになります。
<構成>
<システム.ウェブ>
...その他の要素...
<identity impersonate="true"/> <!-- IIS ユーザー ID を仮定します -->
...その他の要素...
</system.web>
</設定>
要素を追加し、mock 属性を true に設定するだけであることに注意してください。この情報は IIS によって提供されるため、ユーザー アカウントまたはパスワードを入力する必要はありません。つまり、他の人が構成ファイルを読み取ることができたとしても、Web アプリケーションの実行にどの ID 資格情報が使用されているかを判断することはできません。
この時点で、カスタム ユーザーが生成され、SQL Server と IIS にアクセスするための適切な権限が設定されました。