Se la stored procedure è stata creata utilizzando EXECUTE AS CALLER (che credo sia l'impostazione predefinita), il chiamante deve disporre di tutte le autorizzazioni necessarie per eseguire qualsiasi operazione eseguita dalla stored procedure oltre a EXECUTE sulla procedura.
Dalla documentazione di SQL Server per EXECUTE AS:
Si noti che a causa del modo in cui SQL Server elabora i controlli di autorizzazione utilizzando le catene di proprietà, ciò non è sempre del tutto vero e suppongo che la concessione di CONTROL sulla procedura (che conferisce lo stato di proprietà al beneficiario) stia causando l'esecuzione di questi controlli di autorizzazione bypassato.
Se crei la procedura con ESEGUI COME PROPRIETARIO, non dovresti aver bisogno di concedere autorizzazioni oltre a ESEGUI sulla procedura.