Używam Sql Server 2008 i mam proc, który używa sp_executesql wewnątrz. Otrzymuję następujący błąd podczas wykonywania procesu przez ASP.NET:błąd "wybierz odmówiono zgody" podczas używania sp_executesql w proc (Sql Server 2008)
Odmówiono uprawnienia SELECT dla obiektu "MyTable", bazy danych "MyDatabase", schematu "dbo".
Zrobiłem wiele badań na ten temat i większość ludzi wskazuje na to, że muszę przyznać uprawnienie do wybierania w tabeli podstawowej, z której odczytuje moje dynamiczne zapytanie. Cóż, zrobiłem to i to wciąż nie wydają się działać:
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
Jak widać, mam już przesada próbować udzielić select na tabeli podstawowej. Odtworzono nawet mój proc, tak że odwołuje się on tylko do MyTable w dynamicznym sql. Wydałem nawet pozwolenie dla wszystkich użytkowników "wykonaj" na proc ... Brak szczęścia.
Powyższy "myuser" jest nazwą użytkownika w moim łańcuchu połączeń w pliku web.config.
Czy tu czegoś brakuje?
Dzięki! Dave
Czy procedura składowana ma zdefiniowane wyrażenie 'WITH EXECUTE AS'? – Aaronaught
Tak ... wypróbowałem to z "MyUser", dzwoniąc, ja, właściciel. Czy są jeszcze inne, których mi brakuje? Zabawne jest to, że kiedy używam MyUser, to ten sam błąd pojawia się w oknie zapytań w studio zarządzania (bez tego nie) – Dave