Mam pytanie dotyczące typów tabel zdefiniowanych przez użytkownika w programie SQL Server 2008.
Na potrzeby jednej z aplikacji ASP.NET zdefiniowaliśmy własne typy tabel na SQL Server 2008, aby używać ich jako parametrów w procedurach składowanych (wykonując polecenie sql w aplikacji ASP.NET przekazujemy obiekt DataTable jako parametr procedury składowanej zobacz tutaj przykład )
Problem polega na tym, że gdy uruchamiamy polecenie Sql (wykonaj procedurę składowaną) z ASP.NET, otrzymujemy błąd:
Odmowa uprawnienia EXECUTE do obiektu „ourTableType”, bazy danych „ourDatabase”, schematu „ourSchema”.
Dlaczego to jest takie? Dlaczego musimy ustawić uprawnienia do typów tabel zdefiniowanych przez użytkownika? Dlaczego nie wystarczy mieć uprawnienia ustawione tylko w procedurze składowanej, która go używa? A jeśli musimy ustawić go bez względu na to, dlaczego nie ma EXECUTE
typu uprawnienie do zestawu w oknie właściwości w ogóle (Widzę tylko Control
, References
, Take Ownership
, View Definition
)?
Nie rozumiem też, że ustawienie uprawnień Control
w oknie właściwości rozwiązuje problem, a procedura składowana działa bez problemów.
AS dbo
na końcu. Tak:GRANT EXEC ON TYPE::[schema].[typename] TO [User] AS dbo
. Pracował dla mnie.Odpowiedzi:
Naprawdę mam nadzieję, że już to rozwiązałeś, ponieważ pytanie ma prawie 4 miesiące, ale na wypadek, gdybyś tego nie zrobił, oto, co myślę, że jest odpowiedź.
GRANT EXEC ON TYPE::[schema].[typename] TO [User] GO
źródło
Jeśli twoja procedura składowana używa dynamicznego sql, co oznacza, że
@sql
jest generowany, a następnie wykonywany za pośrednictwemexec @sql
, będziesz potrzebować uprawnień udzielonych w bazowych tabelach.Jednym obejściem jest zmodyfikowanie procedury składowanej, aby działała jako inny użytkownik . Jeśli sprawisz, że będzie działał jako SELF, zostanie uruchomiony pod twórcą przechowywanego procesu, co jest niezwykle niebezpieczne. Jeśli jednak nie masz innej opcji:
CREATE PROCEDURE dbo.usp_Demo WITH EXECUTE AS SELF
źródło
INSERT INTO
i „AKTUALIZUJ” instrukcje tabeli, do których ten użytkownik ma wszystkie potrzebne mu uprawnienia. Również ten użytkownik / login jest specjalnie zarezerwowany / utworzony dla tej aplikacji ASP.NET, aby móc łączyć się z tą bazą danych i wykonywać tylko procedury składowane (nie tworzyć itp., Twórca jest zawsze'sa'
).