Kwestie mogąc aby wyłączyć wyzwalaczy Ograniczeń wyłączyć, a zestaw IDENTITY_INSERT ON
może nie być przytłaczająca powód, aby zobaczyć ADMINISTER BULK OPERATIONS
, ADMINISTER DATABASE BULK OPERATIONS
(począwszy od SQL Server 2017), czy bulkadmin
rola serwera jako zagrożenie. Powodem jest to, że aby wykonać którąkolwiek z tych trzech wyżej wymienionych rzeczy, użytkownik musi mieć ALTER TABLE
uprawnienia do tej tabeli lub schematu, w którym tabela istnieje. Łańcuch własności nie obejmuje modyfikacji DDL. Tak więc, jeśli użytkownik nie ma ALTER TABLE
, to możliwość zrobienia tych trzech rzeczy nie stanowi problemu.
Co nie zostało omówione do tej pory, i co może ostatecznie być kwestia bezpieczeństwa jest to, że oba i dostęp do zasobów zewnętrznych, poza SQL Server. Podczas uzyskiwania dostępu do programu SQL Server za pomocą logowania do systemu Windows to konto Windows zostanie podszywane (nawet jeśli zmienisz kontekst zabezpieczeń za pomocą ) w celu uzyskania dostępu do systemu plików. Oznacza to, że możesz czytać tylko te pliki, do których odczytu masz uprawnienia. Nic w tym złego.BULK INSERT
OPENROWSET(BULK...
EXECUTE AS LOGIN='...'
ALE, podczas uzyskiwania dostępu do programu SQL Server za pomocą logowania do SQL Server, dostęp zewnętrzny jest wykonywany w kontekście konta usługi SQL Server. Oznacza to, że osoba z tym uprawnieniem może czytać pliki, których inaczej nie mogłaby odczytać, oraz w folderach, do których nie powinna mieć dostępu.
Jako minimum, jeśli SQL Server został skonfigurowany do działania jako konto utworzone tylko dla SQL Server (preferowana metoda), wówczas taki użytkownik mógłby odczytać tylko te pliki, do których dostęp ma konto „SQL Server”. Chociaż jest to ograniczony problem, nadal pozwala na odczyt plików, takich jak pliki dziennika SQL Server (przetestowałem następujący przykład i działa):
SELECT tmp.[Col1]
FROM OPENROWSET(BULK
N'C:\Program Files\Microsoft SQL Server\MSSQLxx.InstanceName\MSSQL\Log\ERRORLOG.1',
SINGLE_NCLOB) tmp([Col1]);
Większość ludzi nie będzie miała dostępu do folderu MSSQL \ Log , więc byłby to sposób na obejście istniejących ograniczeń bezpieczeństwa.
A jeśli SQL Server działa jako Local System
konto, podejrzewam, że zakres problemu tylko się zwiększa i że Użytkownik z tym uprawnieniem będzie mógł odczytać szeroki zakres plików związanych z systemem.
I jest prawdopodobne, że inne metody importu zbiorczego - BCP i SqlBulkCopy
- nie wymagają bulkadmin
uprawnień / roli: są inicjowane poza SQL Server i same zajmują się uprawnieniami systemu plików. W takich przypadkach SQL Server nigdy nie odczytuje pliku (lub dociera poza SQL Server), po prostu otrzymuje dane do zaimportowania z pliku odczytywanego przez proces zewnętrzny.
Nawiązało się to do wcześniejszej odpowiedzi („... wyłącz wyzwalacze ”), ale nie wyjaśnia, dlaczego wyłączenie byłoby niepożądane z biznesowego punktu widzenia.
W wielu firmach wyzwalacze na głównym stole służą do:
Sprawdź poprawność ograniczeń (te z logiką biznesową bardziej skomplikowane niż zwykle stosowane w ograniczeniach DB)
Co ważniejsze, w celu przeprowadzenia kontroli danych, w szczególności wstawienia danych do odpowiedniej tabeli kontroli (lub zaktualizowania pól kontroli w tabeli głównej).
To dość oczywiste, jakie są problemy z tym pierwszym (twoja aplikacja może wstawiać złe dane, co ma negatywny wpływ na dalsze przetwarzanie). Jeśli chodzi o to drugie, jeśli wyzwalacz jest wyłączony, nie masz żadnych informacji kontrolnych, co stwarza dwa problemy z perspektywy kontroli:
Po pierwsze, audyt jako grupa nie może już kontrolować zmian danych, a zatem nie może wykonywać swojej podstawowej funkcji jako Audytu Wewnętrznego.
Po drugie, brak danych z audytu może stanowić naruszenie wymogów kontrolnych, którymi podlega firma (np. SAS 70) - co może pociągać za sobą odpowiedzialność firmy za naruszenie umów.
źródło
Inną możliwością jest wpływ uruchomienia
BULK INSERT
operacji.Zwykle tego rodzaju rzeczy byłyby uruchamiane poza godzinami pracy, jeśli to możliwe, aby nie zakłócać normalnej aktywności. Wstawka zbiorcza może blokować tabelę na wiele godzin, zapobiegając występowaniu innych wstawek (a także wybierać, aktualizować lub usuwać).
Lub, z punktu widzenia bezpieczeństwa, może dać bardzo podobne wyniki do ataku DoS.
Trzeba to zrobić przypadkowo lub celowo za pomocą transakcji i prostych
INSERT
wyciągów. Jednak użycie procesu wstawiania luzem zgodnie z przeznaczeniem może powodować ten efekt.Ogólnie rzecz biorąc, spodziewałbym się, że DBA będzie zaangażowane w organizowanie zajęć poza godzinami pracy, ponieważ muszą one również upewnić się, że kopie zapasowe i inne zaplanowane zadania zostały ukończone. Gdyby ludzie mieli zaplanować tego rodzaju czynności bez wystarczającego uwzględnienia takich działań, można by zobaczyć, że tworzenie kopii zapasowych kończy się niepowodzeniem - co może być problemem z wielu powodów.
źródło
Jednym z powodów tego może być wyjaśnienie rejestrowania działań. Jeśli każda akcja odpowiada jednemu wpisowi w pliku dziennika, dość trywialne jest zobaczenie czegoś, co spowodowało problem bez żadnych dodatkowych odniesień. Jeśli w pliku dziennika jest napisane „WSTAW Z pliku zewnętrznego.pliku”, bez pliku zewnętrznego. Nie możesz nic więcej powiedzieć.
Oczywiście możesz zmodyfikować sposób rejestrowania, ale jako punkt wyjścia wymuszanie atomizacji każdej akcji nawet podczas rejestrowania nie jest strasznym pomysłem.
źródło