Ok, auf der Grundlage des obigen Kommentars und gemäß meinem Verdacht - es scheint, als ob Sie versuchen, dynamisches SQL in Ihrer gespeicherten Prozedur auszuführen.
Was Sie beachten müssen, ist, dass es dabei nicht im Kontext der gespeicherten Prozedur ausgeführt wird, sondern in einer neuen Sitzung. Aus diesem Grund ist die Tatsache, dass die Anweisung innerhalb einer gespeicherten Prozedur aufgerufen wird, ein strittiger Punkt, und Sie müssen explizite Berechtigungen für die Objekte erteilen, die Ihr dynamisches SQL verwendet.
Wenn Sie dies nicht möchten, würde ich Ihre gespeicherte Prozedur so umgestalten, dass kein dynamisches SQL verwendet wird.
Der folgende Link von Microsoft soll Ihnen bei Ihrem Problem helfen:
PRB: Sicherheitskontext dynamischer SQL-Anweisungen in einer gespeicherten Prozedur (Wayback Machine-Archiv)
Dieses Verhalten tritt auf, weil eine dynamische Ausführungsabfrage (sp_executesql oder EXECUTE) in einem von der gespeicherten Hauptprozedur getrennten Kontext ausgeführt wird. Es wird im Sicherheitskontext des Benutzers ausgeführt, der die gespeicherte Prozedur ausführt, und nicht im Sicherheitskontext des Eigentümers der gespeicherten Prozedur.
Dies wird auch im (aktuelleren) Microsoft Docs-Artikel erläutert:
Schreiben von Secure Dynamic SQL in SQL Server
Das Ausführen dynamisch erstellter SQL-Anweisungen in Ihrem Prozedurcode unterbricht die Besitzerkette und veranlasst SQL Server, die Berechtigungen des Aufrufers anhand der Objekte zu überprüfen, auf die das dynamische SQL zugreift.