説明/参照:
Explanation:
データベースロールになるストアドプロシージャに対するEXECUTE権限を付与するだけで十分です。
データにアクセスすることができます。このユーザーにロールを追加する必要はありません。
注意:
データベースの周囲に複数の防御線を作成する1つの方法は、すべてのデータアクセスを実装することです。
ストアドプロシージャまたはユーザー定義関数を使用する。基になるすべての権限を取り消すか拒否します
テーブルなどのオブジェクトを作成し、ストアドプロシージャに対するEXECUTE権限を付与します。これは効果的に
データおよびデータベースオブジェクトのセキュリティ境界。
ベストプラクティス
単純にストアドプロシージャを作成するだけでは、アプリケーションを十分に保護できません。あなたも
以下の潜在的なセキュリティホールを検討してください。
可能にしたいデータベースロールのストアドプロシージャに対するEXECUTEパーミッションを付与します。

データにアクセスします。
データベース内のすべてのロールとユーザーについて、基礎となるテーブルに対するすべての権限を取り消すか拒否します。

公共の役割を含む。すべてのユーザーはパブリックから権限を継承します。そのためにアクセス許可を拒否する
publicは、所有者とsysadminメンバーだけがアクセスできることを意味します。他のすべてのユーザーはできなくなります
他のロールのメンバーシップから権限を継承します。
sysadminまたはdb_ownerロールにユーザーまたはロールを追加しないでください。システム管理者とデータベース

所有者はすべてのデータベースオブジェクトにアクセスできます。
参照先:https://docs.microsoft.com/ja-jp/dotnet/framework/data/adonet/sql/managing-permissions-
SQL Server内のwith-stored-Procedures-in