2016-09-05 6 views
-1

私は古い投稿を見てきましたが、これに関するいくつかの相反する情報があります。私はSQL Serverデータベースを持っており、C#コード(.Net 4.5)でそれを話しています。私はストアドプロシージャを使用してデータベース内のすべてを行い、コールするときに入力をパラメータ化しました。SQL Server - SQLインジェクションを防止する

データベースをロックしてSQLコードを受け付けず、ストアドプロシージャの呼び出しにのみ応答するようにしたいと思います。これは可能ですか?

+0

アドホックSQLを拒否する設定はありませんが、ストアドプロシージャのEXECUTE権限のみを許可します。これにより、procs(破損していない所有権チェーンを想定)を介したデータアクセスが許可され、非特権アカウントによるアドホックアクセス。 –

+0

@ダン - これを見て、うまくいくように見えます。応答に感謝します。 – John

答えて

0

アドホックSQLを完全に禁止する設定はありませんが、アプリケーションコードによって直接呼び出されるストアドプロシージャに対してのみ、EXECUTEのアクセス許可のみを与えることができます。ストアドプロシージャによって参照されるオブジェクトのパーミッションは、所有者チェーンが破られていない限り必要ありません。つまり、ストアドプロシージャと参照されるスキーマ/オブジェクトは同じユーザー(通常はdbo)が所有します。この方法は、非特権アカウントによるアドホックアクセスを防止します。

procsで動的SQLを使用する場合は、所有権のチェーンが適用されないように注意してください。 procsに動的SQL(安全に構築されたSQLとパラメータ化されたもの)がある場合、動的SQL文で参照されているオブジェクトに対するアクセス権をユーザに許可することなく、proc内から必要な権限を提供するために証明書を使用してモジュールに署名できます。詳細と例については、giving permissions through stored proceduresを参照してください。

すべてのSqlCommandオブジェクトに必ずCommandType.StoredProcedureを指定して、パラメータを個別に渡す必要があります。 CommandType.Textを使用してストアドプロシージャを実行することは可能ですが、安全に行うためには細部まで細心の注意が必要です。

関連する問題