Zainspirowany tym wątkiem - Czy trzymanie Id na froncie jest dobrą praktyką? zacząłem się zastanawiać, jakie znacie i stosujecie sposoby zabezpieczeń bazy przed zniszczeniami. I nie chodzi mi o blokowanie działań w stylu SQL injection
, tylko raczej co w sytuacji, jeśli będzie jakaś dziura i przykładowo komuś uda się jakieś zapytanie podrzucić.
Takim konkretnym impulsem był ten post - https://4programmers.net/Forum/1696296. Bo o ile ukrycie ID danego usera problem z dostępem do tego konkretnego pacjenta rozwiązuje, ale nie zabezpiecza nas to przed wstawieniem WHERE 1=1
. Doszedłem do wniosku, że chyba najlepiej jest zablokować loginom/rolom/użytkownikom SQL którzy się łączą z bazą wszystkie operacje typu DELETE, DROP
itp i stworzyć jakieś procedury w bazie, które będą odpowiadać za wykonywanie operacji zapisu. Jak nie podasz wprost ID (albo nie spełnisz jakiegoś innego wymogu zabezpieczającego), to nic się nie wykona. Poszukałem w necie i wygląda na to, że ktoś wpadł na to już przede mną :D - chociażby https://stackoverflow.com/questions/4910449/disable-all-queries-in-sql-server-that-dont-use-named-parameters.
Tylko nie wiem, czy to ma sens, a może jest przysłowiową armatą na komara. Czy takie coś nie zabije bazy?
Pytanie - co Wy o tym sądzicie? Jakie stosujecie rozwiązania/patenty?