2

データベース ロール ( db_datareaderdb_datawriterdb_ddladminなど)のリストにdb_storedprocedureexecutor. 他の方法は理にかなっていますが、特定のユーザーにすべてのストアド プロシージャを実行する機能を付与できるように思えます (それらを付与せずにdb_owner、同じことを達成する唯一の他の方法です)。

たとえば、開発者全員にストアド プロシージャを実行する権限を付与し、DDL を実行させないようにしたいとします。すべてのストアド プロシージャに明示的に EXECUTE を付与する必要はありません (さらに、追加の SP がデプロイされたときに新しいものを追加することを忘れないでください)。 、これを行う方法はありません(SPにDDLを含めることができることはわかっているため、この方法でDDLへのアクセスを間接的に許可することができます)。

アプリケーション サービス アカウントと、アプリケーションに付随する多数のストアド プロシージャがある場合、すべての SP に明示的に権限を付与する必要があります (アプリケーション サービス アカウント DBO を付与したくないため)。必要なものを更新/削除できるようにする役割。

最初は明らかなように思えましたが、なぜこの役割がデータベースサーバーにないのか、今ではわかりません.なぜこれがひどい考えなのか、誰かが説明できますか?

編集:

この期待を持っているのは私だけではないようです-そして、それは一握りのT-SQLで回避されています(あなたができるとは知りませんでしたが、ブランケットEXECUTE権限を付与できるようです)。なぜそれが標準ではないのですか!

4

2 に答える 2

4

スキーマを使用する場合は、次のことを行うだけです。GRANT EXECUTE ON SCHEMA::storedprocschema

例えばCREATE PROC storedprocschema.DoStuff ...

理由については、わかりません...

于 2010-11-21T19:24:26.537 に答える
-1

なぜなら、すべてのストアドプロシージャを実行できれば、を実行できsp_addrolemember、できることはすべて実行できるからdatabase_ownerです。

于 2010-11-21T19:24:16.147 に答える