Om den lagrade proceduren skapades med EXECUTE AS CALLER (vilket jag tror är standard), måste den som ringer ha alla nödvändiga behörigheter för att göra vad den lagrade proceduren än gör utöver EXECUTE på proceduren.
Från SQL Server-dokumentationen för EXECUTE AS:
Observera att på grund av hur SQL Server bearbetar behörighetskontroller med hjälp av ägandekedjor, är detta inte alltid strikt sant, och jag gissar att beviljande av KONTROLL på proceduren (som ger ägarstatus till förmånstagaren) gör att dessa behörighetskontroller blir förbigås.
Om du skapar proceduren med UTFÖR SOM ÄGARE, bör du inte behöva ge några behörigheter utöver EXEKUT för proceduren.