次の方法で共有


LINQ to SQL におけるセキュリティ

データベースに接続するときは、常にセキュリティのリスクがあります。 LINQ to SQL には SQL Server のデータを操作する新しい方法が含まれていますが、セキュリティ メカニズムは追加されていません。

アクセス制御と認証

LINQ to SQL には独自のユーザー モデルや認証メカニズムがありません。 オブジェクト モデルにマッピングされるデータベース、データベースのテーブル、ビュー、ストアド プロシージャなどへのアクセス制御には SQL Server のセキュリティを使用します。 ユーザーには必要最小限のアクセス権を与え、ユーザー認証には強力なパスワードを要求してください。

マッピングとスキーマ情報

オブジェクト モデルまたは外部マッピング ファイルにある、SQL-CLR 型マッピングとデータベース スキーマ情報は、ファイル システムでこれらのファイルに対してアクセス権を持つ全ユーザーに公開されます。 オブジェクト モデルや外部マッピング ファイルにアクセスできるユーザーはすべてスキーマ情報を使用できると想定してください。スキーマ情報へのアクセスを制限するには、ファイルのセキュリティ メカニズムを使用してソース ファイルとマッピング ファイルのセキュリティを確保します。

接続文字列

接続文字列にパスワードを使用することは、できるだけ避けてください。 接続文字列自体がセキュリティのリスクであるうえに、接続文字列はオブジェクト リレーショナル デザイナーまたは SQLMetal コマンド ライン ツールの使用時にオブジェクト モデルや外部マッピング ファイルにクリア テキストで追加できます。 ファイル システムでオブジェクト モデルまたは外部マッピング ファイルに対してアクセス権があれば、どのユーザーでも接続パスワードを見ることができます (パスワードが接続文字列に含まれている場合)。

このようなリスクを最小限に抑えるには、統合セキュリティを使用して SQL Server との信頼関係接続を作成します。 この方法を使用すると、接続文字列にパスワードを含める必要がなくなります。 詳細については、「SQL Server のセキュリティ (ADO.NET)」を参照してください。

統合セキュリティがない場合は、接続文字列にクリア テキストのパスワードが必要になります。 以下は、接続文字列のセキュリティ保護に最も有効な手段です。

  • 統合セキュリティを使用します。

  • 接続文字列をパスワードで保護し、接続文字列の配布を最小限にします。

  • 接続文字列の代わりに、表示時間に制限のある System.Data.SqlClient.SqlConnection クラスを使用します。 LINQ to SQL の System.Data.Linq.DataContext クラスは SqlConnection を使用してインスタンス化できます。

  • すべての接続文字列の期限と接触点を最小限にします。

参照

概念

よく寄せられる質問 (LINQ to SQL)

その他の技術情報

背景情報 (LINQ to SQL)