Jakie są konsekwencje bezpieczeństwa sp_executesql?

9

Domyślnie w programie SQL Server [public]rola ma EXECUTEuprawnienia sp_executesql.

Jednak odziedziczyłem serwer bazy danych, na którym poprzednie DBA odwołało to EXECUTEprawo sp_executesql.

Jako tymczasowe obejście, przyznawałem EXECUTEuprawnienia sp_executesqlwedług potrzeb (poprzez rolę w głównej bazie danych). Ale to zaczyna być bólem podtrzymującym.

Jeśli przyznam EXECUTEpublicznie, czy są jakieś konsekwencje, o których muszę wiedzieć?

AlexLostDba
źródło

Odpowiedzi:

8

Żaden. sp_executesqlwykonuje SQL, w dokładnie takim samym kontekście i uprawnieniach, jak oryginalny wywołujący wykonywałby ten sam SQL. Istnieje wiele, wiele przypadków, w których dynamiczny SQL jest nieunikniony.

Remus Rusanu
źródło
3
-1 ponieważ odpowiedź nie wskazuje, że Microsoft zauważa, że może stanowić zagrożenie bezpieczeństwa msdn.microsoft.com/en-us/library/ms188001(v=sql.105).aspx
miracle173
@ miracle173 - Szczerze mówiąc, jest to źle napisany dynamiczny SQL, który nie stanowi zagrożenia bezpieczeństwa sp_executesql. Zakładając, że dynamiczny wymóg SQL, następnie wyłączenie sp_executesqlmoże faktycznie zwiększyć ryzyko, ponieważ przynajmniej pozwala to na parametryzację zapytań (w przeciwieństwie do EXEC)
Martin Smith
2
Ryzyko wstrzyknięcia sql nigdy nie może być niedoceniane, ale wyłączenie sp_executesqlnie jest odpowiednim środkiem łagodzącym. Przeważająca większość błędów wstrzykiwania SQL występuje u klienta, gdy instrukcja SQL jest budowana „ręcznie” przez połączenie fragmentów SQL ze zmiennymi wejściowymi, a następnie wykonuje się „tak jak jest”. Dla wszystkich tych przypadków sp_executesqlwyłączenie nic nie pomaga.
Remus Rusanu,