Wydaje mi się, że nie czekasz na kod SQL w odpowiedzi na swoje pytanie. Głównym aspektem twojego pytania jest aspekt bezpieczeństwa. Co powinieneś zrobić, aby wdrożyć swoje wymagania bez sysadmina przywileje i bez nowej luki w zabezpieczeniach? Myślę, że to jest twoje prawdziwe pytanie.
Widzę co najmniej 3 sposoby rozwiązania twojego problemu. Ale przede wszystkim krótkie wyjaśnienie, dlaczego uprawnienia administratora istnieją we wszystkich rozwiązaniach opartych na Rozszerzonych procedurach składowanych . Rozszerzone procedury składowane, takie jak xp_cmdshell
są bardzo stare. Istniały co najmniej przed SQL Server 4.2, pierwszym Microsoft SQL Server działającym pod pierwszym Windows NT (NT 3.1). W starej wersji SQL Server nie ograniczałem się do wykonywania takich procedur, ale później takie ograniczenia zostały wprowadzone. Ważne jest, aby zrozumieć, że wszystkie ogólne cele procedury umożliwiające rozpoczęcie dowolnego procesu pod kontem SQL Server, takim jak xp_cmdshell
i sp_OACreate
musi mieć sysadmina ograniczenie przywilejów. Tylko zorientowany na zadanie procedury z jasnym obszarem użytkowania i uprawnieniami opartymi na rolach mogą rozwiązać problem bez luki w zabezpieczeniach. Oto 3 sposoby rozwiązania, które obiecałem wcześniej:
- Tworzysz nowe konto SQL na serwerze SQL za pomocą sysadmina przywileje. Następnie tworzysz procedurę składowaną, która korzysta z niektórych z Rozszerzonych procedur składowanych jak
xp_cmdshell
lubsp_OACreate
i technicznie zaimplementuj Twoje wymagania (wyeksportuj niektóre informacje do pliku CSV). W odniesieniu do WYKONAJ JAKO Klauzula (patrz http://msdn.microsoft.com/en-us/ biblioteka/ms188354.aspx ) konfigurujesz utworzoną procedurę składowaną tak, aby działała na koncie z sysadmin przywileje. Delegujesz wykonanie tej procedury użytkownikom z pewną rolą SQL, aby być bardziej elastycznym od strony delegowania uprawnień. - Możesz użyć procedur składowanych CLR zamiast
xp_cmdshell
isp_OACreate
. Powinieneś również użyć uprawnień opartych na rolach w utworzonej procedurze. - Użytkownik końcowy nie wywołuje bezpośrednio żadnej utworzonej przez użytkownika procedury składowanej SQL. Istnieje oprogramowanie (takie jak usługa WCF lub witryna sieci Web), które wywołuje procedurę składowaną SQL. Możesz zaimplementować eksport do pliku CSV w tym oprogramowaniu, a nie w żadnej procedurze składowanej SQL.
We wszystkich sposobach implementacji powinieneś dokładnie określić gdzie będziesz przechowywać hasło konta, za pomocą którego uzyskujesz dostęp do systemu plików. Istnieją różne opcje, wszystkie z odpowiadającymi im zaletami i wadami. Możliwe jest użycie personifikacji, aby umożliwić dostęp do systemu plików za pomocą konta użytkownika końcowego. Najlepszy sposób zależy od sytuacji w Twoim otoczeniu.