2011-06-26 14 views
7

SQL Serverのすべてのアクセス許可を拒否(たとえば、選択、挿入など)し、ストアドプロシージャを介して一時的なアクセス許可を与えることはできますか。 SQLデータベースのデータにアクセスするためにストアドプロシージャだけを使用したい。SQL Serverのストアドプロシージャとアクセス許可

これは可能ですか、別の方法ですか?

答えて

6

これは、私のSQL Serverをサポートしている良いパターンです。

基本的に、ストアドプロシージャに対するアクセス権を持つユーザーは、procとテーブルの所有者が同じ場合(通常はdbo)、テーブルアクセス権はまったく必要ありません。テーブル上の権限だけで、このような状況ではチェックされませんので、明示的な「権限が拒否」あまりにも無視されます(DENY「パーミッションなし」とは異なる)

同じことがビューに適用されます。それは、ownership chaining

ノートと呼ばれています、関数など(例:ビュー呼び出し表、ビュー呼び出し呼び出し、...)

5

彼は、その後の選択を行うことをしようとする場合は、[はい、これはあなたがPROCに実行権を与えた場合、ユーザはPROCを実行すると、それが動作することができるようになります、ownership chainingと呼ばれ、彼が戻って

データを取得しますSSMSからのテーブルには、それが(彼はデータリーダーまたはそれ以上の役割ではないことを提供する)

を動作しません。あなたは、ストアドプロシージャ内の動的SQLを使用している場合、あなたは余分な必要がありますが、動的SQLはownership chainingを壊すことに注意してくださいその場合の許可

+3

"所有権チェーン":http://msdn.microsoft.com/en-us/library/ms188676.aspx – gbn

+0

正しい私は...... – SQLMenace

1

これはストアドプロシージャでのみ機能するのではなく、ビューでも機能します。
一般に、基になるテーブルに対して同じユーザー権限を与えなくても、ビューやsprocのような「上位レベル」のオブジェクトに対してユーザーに権限を与えることができます。

関連する問題