Ich benutze Sql Server 2008 und habe eine Prozedur, die sp_executesql verwendet. Ich bekomme den folgenden Fehler beim Ausführen der Prozedur durch ASP.NET:Fehlermeldung "select permission denied" bei Verwendung von sp_executesql in proc (Sql Server 2008)
Die SELECT-Berechtigung wurde für das Objekt 'MyTable', Datenbank 'MyDatabase', Schema 'Dbo' verweigert.
Ich habe viele Untersuchungen dazu durchgeführt und die meisten Leute verweisen auf die Tatsache, dass ich eine Auswahlberechtigung für die zugrunde liegende Tabelle gewähren muss, aus der meine dynamische Abfrage liest. Nun, ich habe dies getan, und es scheint noch nicht an die Arbeit:
select object_name(major_id) as object,
user_name(grantee_principal_id) as grantee,
user_name(grantor_principal_id) as grantor,
permission_name,
state_desc
from sys.database_permissions
where major_id = object_id('User') and
class = 1
Results: MyTable public dbo SELECT GRANT MyTable guest dbo SELECT GRANT MyTable myuser dbo SELECT GRANT MyTable NT AUTHORITY\NETWORK SERVICE dbo SELECT GRANT
Wie Sie sehen können, habe ich viel des Guten gegangen zu versuchen, wählen Sie auf der zugrunde liegenden Tabelle zu gewähren. Ich habe sogar mein Proc down neu geschrieben, so dass es nur auf MyTable im dynamischen sql verweist. Ich habe sogar allen oben genannten Benutzern die Erlaubnis erteilt, auf dem Proc auszuführen ... Kein Glück.
Der "myuser" oben ist der Benutzername in meinem Connectionstring in der web.config.
Fehle ich hier etwas?
Danke! Dave
Ist in der gespeicherten Prozedur ein 'WITH EXECUTE AS' definiert? – Aaronaught
Ja ... versuchte es mit "MyUser", Anrufer, Selbst, Besitzer. Gibt es noch andere, die ich vermisse? Lustige Sache ist, dass, wenn ich MyUser verwende, dann wirft es den gleichen Fehler in Management Studio Abfragefenster (während ohne dies nicht) – Dave