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

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

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

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