Hvis den lagrede procedure blev oprettet ved hjælp af EXECUTE AS CALLER (som jeg mener er standard), skal den, der ringer, have alle de nødvendige tilladelser til at gøre, hvad den lagrede procedure gør ud over EXECUTE på proceduren.
Fra SQL Server-dokumentationen for EXECUTE AS:
Bemærk, at på grund af den måde, SQL Server behandler tilladelsestjek ved hjælp af ejerskabskæder, er dette strengt taget ikke altid sandt, og jeg gætter på, at tildeling af KONTROL på proceduren (som giver ejerskabsstatus til bevillingsmodtageren) forårsager, at disse tilladelsestjek bliver omgået.
Hvis du opretter proceduren med UDFØR SOM EJER, så skulle du ikke have behov for at give nogen tilladelser ud over UDFØR på proceduren.