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.