セキュリティ リスクは、データベースに接続するときに常に存在します。 LINQ to SQL には、SQL Server のデータを操作するための新しい方法がいくつか含まれている場合がありますが、追加のセキュリティ メカニズムは提供されません。
アクセス制御と認証
LINQ to SQL には、独自のユーザー モデルや認証メカニズムがありません。 SQL Server セキュリティを使用して、オブジェクト モデルにマップされるデータベース、データベース テーブル、ビュー、ストアド プロシージャへのアクセスを制御します。 最小限必要なアクセス権をユーザーに付与し、ユーザー認証に強力なパスワードを要求します。
マッピングとスキーマ情報
オブジェクト モデルまたは外部マッピング ファイル内の SQL-CLR 型マッピングとデータベース スキーマ情報は、ファイル システム内のこれらのファイルにアクセスできるすべてのユーザーに対して使用できます。 オブジェクト モデルまたは外部マッピング ファイルにアクセスできるすべてのユーザーがスキーマ情報を使用できることを前提としています。 スキーマ情報への広範なアクセスを防ぐには、ファイル セキュリティ メカニズムを使用して、ソース ファイルとマッピング ファイルをセキュリティで保護します。
接続文字列
接続文字列でのパスワードの使用は、可能な限り避ける必要があります。 接続文字列自体がセキュリティ 上のリスクであるだけでなく、オブジェクト リレーショナル デザイナーまたは SQLMetal コマンド ライン ツールを使用する場合は、接続文字列をクリア テキストでオブジェクト モデルまたは外部マッピング ファイルに追加することもできます。 ファイル システムを介してオブジェクト モデルまたは外部マッピング ファイルにアクセスできるユーザーは、接続パスワード (接続文字列に含まれている場合) を確認できます。
このようなリスクを最小限に抑えるには、統合セキュリティを使用して SQL Server との信頼された接続を確立します。 この方法を使用すると、接続文字列にパスワードを格納する必要はありません。 詳細については、「 SQL Server のセキュリティ」を参照してください。
統合セキュリティがない場合は、接続文字列にクリア テキスト パスワードが必要になります。 接続文字列をセキュリティで保護する最善の方法は、リスクの高まり順に次のとおりです。
統合セキュリティを使用します。
パスワードを使用して接続文字列をセキュリティで保護し、接続文字列の通過を最小限に抑えます。
接続文字列の代わりに System.Data.SqlClient.SqlConnection クラスを使用します。これは、公開期間が制限されるためです。 LINQ to SQL System.Data.Linq.DataContext クラスは、 SqlConnectionを使用してインスタンス化できます。
すべての接続文字列の有効期間とタッチ ポイントを最小限に抑えます。