すべてのストアドプロシージャに対する実行の許可


147

次のコマンドは、データベース内のすべてのストアドプロシージャを実行するためのユーザー "MyUser"権限を効果的に与えていますか?

GRANT EXECUTE TO [MyDomain\MyUser]

回答:


244

SQL Server 2008以降:

/* CREATE A NEW ROLE */
CREATE ROLE db_executor

/* GRANT EXECUTE TO THE ROLE */
GRANT EXECUTE TO db_executor

(ロールではなく)ユーザーのみの場合:

USE [DBName]
GO
GRANT EXECUTE TO [user]

28
+1に加えて、将来のストアドプロシージャ(データベースにまだないものなど)にEXECUTE権限を付与することもできますが、後で作成されます。
marc_s

2
私はあなたuserが角括弧の中になければならないかもしれないことに注意する価値があると思います。これは、少なくとも一部には、ユーザーにドメインがアタッチされていた(つまり、\文字が含まれていた)ため、私のユースケースに当てはまりました。編集:エスケープされていないスラッシュ文字を修正
PrinceTyke 2015

1
ユーザーをdb_ddladminロールに割り当てないのはなぜですか?「db_ddladmin固定データベースロールのメンバーは、データベース内の任意のデータ定義言語(DDL)コマンドを実行できます。」- こちらを
マイケルトビッシュ2018

1
ここでの@MichaelTobischは、ストアドプロシージャを実行する必要があるだけです。DDLロールは、作成、変更、削除などのシナリオで使用する必要があります。これらのリンクは便利でなければなりません:docs.microsoft.com/en-us/sql/relational-databases/security/...geeksforgeeks.org/sql-ddl-dml-dcl-tcl-commands
qmasterの

2
そして、次のレベルのユーザーをロールに追加して、誰かが別の研究ステップを節約できるようにする場合。ALTER ROLE db_executorメンバーの追加YourUserNameHere
Piwaf

72

SQL Server 2005では、データベースの実行権限をデータベースの原則に付与する機能が導入されました。

GRANT EXECUTE TO [MyDomain\MyUser]

これにより、すべてのスキーマのすべてのストアドプロシージャが暗黙的に含まれるデータベーススコープで権限が付与されます。つまり、ストアドプロシージャごとにアクセス許可を明示的に付与する必要はありません。

さらに細かくしたい場合は、スキーマの実行権限を付与して制限することもできます

GRANT EXECUTE ON SCHEMA ::dbo TO [MyDomain\MyUser]

5
特定のスキーマに対してこれを実行できるので、sysのアクセス許可を回避できるのは素晴らしいことです
RemarkLima

17

上記の回答に加えて、以下を追加します。


代わりにこれをロールに付与し、そのロールをユーザーに割り当てることができます。をmyAppRights介してロールを作成したとします

CREATE ROLE [myAppRights] 

次に、実行権限を与えることができます

GRANT EXECUTE TO [myAppRights] 

その役割に。


または、スキーマレベルで実行する場合

GRANT EXECUTE ON SCHEMA ::dbo TO [myAppRights]

また、機能します(この例では、ロールmyAppRightsdbo後でスキーマのすべての要素に対する実行権限を持ちます)。

このように、一度行うだけで、後で変更する必要がある場合に、関連するすべてのアプリケーション権限をユーザーに簡単に割り当てたり取り消したりできます。特に、より複雑なアクセスプロファイルを作成する場合に便利です。

注:スキーマにロールを付与すると、後で作成する要素にも影響します。これは、意図した設計によっては有益であるかどうかにかかわらず、留意してください。


-5

[役割]に実行を許可

これは確かに役立ちます


パブリックロールに実行を許可する必要はありません。セキュリティの懸念が生じます。ユーザーまたはロールに付与するだけです。特定のプロシージャに実行を許可することは、誰が何を攻撃しているかを制御できるようにするための最良の方法です。
ammills01 2018年

ここの皮肉は、特に危険な結果をもたらす可能性がある場合、Q&Aサイトには適していません。
クリストファーブラウン

「すべてのログインはパブリック固定サーバーロールに属し、すべてのデータベースユーザーはパブリックデータベースロールに属します。ログインまたはユーザーがセキュリティ保護可能なデバイスに対する特定の権限を付与または拒否されていない場合、ログインまたはユーザーは、パブリックに付与された権限を継承しますつまり、すべてのユーザーにそれらのアクセス許可を付与することを意味するPUBLICにすべてのアクセス許可を付与します。これは大きな脆弱性です。追加のために、このリンクを読む:docs.microsoft.com/en-us/sql/relational-databases/security/...
qmasterの

このような答えがあれば、安全性の低いWebサイトやデータベースが非常に多く存在するのも不思議ではありません。ねえ男。
Dave Lucre
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.