次の方法で共有


SQL Server におけるアプリケーション セキュリティのシナリオ

ADO.NET のダウンロード

安全な SQL Server クライアント アプリケーションを作成するにあたって、絶対に正しいという唯一の方法はありません。 すべてのアプリケーションの要件、デプロイ環境、およびユーザーの作成はそれぞれ独自のものです。 アプリケーションを最初のデプロイ時に適切にセキュリティ保護しても、時間の経過と共にセキュリティが低下していく可能性があります。 将来発生する可能性がある脅威を正確に予測することはできません。

SQL Server は製品として多くのバージョンを経て進化し、開発者が安全なデータベース アプリケーションを作成するための最新のセキュリティ機能が組み込まれてきました。 しかし、普遍的なセキュリティがない以上、継続的に監視し更新してゆくことがどうしても必要になります。

一般的な脅威

開発者は、セキュリティ上の脅威とそれに対抗するツール、および、セキュリティ ホールを作らないようにするにはどうすればよいかを理解しておく必要があります。 セキュリティは、その輪の 1 つでも傷ついていると、全体の強度が低下する鎖と考えると良いでしょう。 以下は、このセクションの各トピックで詳しく取り上げているセキュリティ上の一般的な脅威を一覧にしたものです。

SQL インジェクション

SQL インジェクションとは、悪意のあるユーザーによって、有効な入力データの代わりに Transact-SQL ステートメントが入力されることをいいます。 入力が検証されずにサーバーに直接渡され、挿入されたコードがアプリケーションによって誤って実行されると、この攻撃によってデータが破損または破壊される可能性があります。 SQL Server インジェクション攻撃を阻止する方法としては、ストアド プロシージャやパラメーター化コマンドを使用する方法のほか、動的 SQL を実行できないようにしたり、すべてのユーザーの権限を制限したりすることが考えられます。

権限の昇格

権限の昇格攻撃は、ユーザーが、所有者や管理者など、信頼されたアカウントの権限で振る舞うことのできる状況で発生します。 常に最小権限のユーザー アカウントで実行し、必要なアクセス許可のみを割り当ててください。 コードを実行するために管理者や所有者のアカウントを使用するのは避けてください。 そうすれば、攻撃が成功した場合に被る損害を少なくすることができます。 追加のアクセス許可を必要とするタスクを実行する場合は、タスクの実行中にのみプロシージャ署名や権限借用を使用します。 証明書を使ってストアド プロシージャに署名したり、権限の借用を使用して一時的に権限を割り当てたりできます。

プローブとインテリジェント監視

プローブ攻撃には、アプリケーションから生成されるエラー メッセージを調べてセキュリティ上の脆弱性を探す手法がよく用いられます。 SQL Server エラー情報がエンド ユーザーに返されないように、すべての手続き型コードでエラー処理を実装します。

認証

実行時にユーザー入力に基づいた接続文字列が構築される場合、SQL Server ログインを使用すると、接続文字列インジェクション攻撃が発生する可能性があります。 接続文字列の有効なキーワード ペアがチェックされない場合、攻撃者は余分な文字を挿入できるため、サーバー上の機密データやその他のリソースにアクセスできる可能性があります。 できるだけ Windows 認証を使用してください。 SQL Server ログインを使用する必要がある場合は、SqlConnectionStringBuilder を使用して、実行時に接続文字列を作成し、検証します。

パスワード

侵入者は特権ユーザーのパスワードを取得または推測できたため、多くの攻撃が成功します。 パスワードは侵入者に対する防御の最前線であるため、システムのセキュリティにとって強力なパスワードを設定することは不可欠です。 混合モード認証のパスワード ポリシーを作成して適用します。

Windows 認証を使用する場合でも、sa アカウントに必ず強力なパスワードを割り当てます。

このセクションの内容

SQL Server での安全な動的 SQL の作成
ストアド プロシージャを使用して、安全な動的 SQL を作成する手法について説明します。

次のステップ