Струва ми се, че не чакате SQL код в отговора на въпроса си. Основният аспект на вашия въпрос е аспектът на сигурността. Какво трябва да направите, за да приложите вашето изискване без sysadmin привилегии и без нова дупка в сигурността? Мисля, че това е истинският ви въпрос.
Виждам поне 3 начина да решите проблема си. Но преди всичко кратко обяснение защо привилегиите на sysadmin съществуват във всички решения, базирани на разширени съхранени процедури . Разширени съхранени процедури като xp_cmdshell
са много стари. Те съществуваха поне преди SQL Server 4.2, първият Microsoft SQL Server, работещ под първия Windows NT (NT 3.1). В старата версия на SQL Server нямах ограничение за сигурност за изпълнение на такива процедури, но по-късно бяха направени такива ограничения. Важно е да разберете, че всички са с общо предназначение процедури, които позволяват стартиране на всеки процес под акаунт на SQL Server като xp_cmdshell
и sp_OACreate
задължително има сисадмин ограничение на привилегиите. Само ориентиран към задачи процедури с ясна област на използване и базирани на роли разрешения могат да решат проблема без дупка в сигурността. Така че това са 3-те начина за решение, които обещах преди:
- Създавате нов SQL акаунт на вашия SQL сървър с sysadmin привилегии. След това създавате съхранена процедура, която използва някои от Разширени съхранени процедури като
xp_cmdshell
илиsp_OACreate
и техническо изпълнение на вашите изисквания (експортиране на част от информацията в CSV файл). По отношение на ИЗПЪЛНЕНИЕ КАТО Клауза (вижте http://msdn.microsoft.com/en-us/ библиотека/ms188354.aspx ) конфигурирате създадената съхранена процедура така, че да работи под акаунта с sysadmin привилегии. Вие делегирате изпълнението на тази процедура на потребители с някаква SQL роля, за да бъдете по-гъвкави от страна на делегирането на разрешение. - Можете да използвате CLR съхранени процедури вместо
xp_cmdshell
иsp_OACreate
. Трябва също така да използвате разрешения, базирани на роли, за създадената процедура. - Крайният потребител не извиква директно никоя съхранена SQL процедура, която създавате. Съществува част от софтуера (като WCF услуга или уеб сайт), който извиква вашата SQL съхранена процедура. Можете да приложите експортирането към CSV файл вътре в този софтуер, а не в която и да е съхранена SQL процедура.
Във всички начини на внедряване трябва точно да определите къде ще държите паролата на акаунта, с който осъществявате достъп до файловата система. Има различни опции, които имате, всички със съответните предимства и недостатъци. Възможно е да се използва имитация, за да се разреши достъп до файловата система с акаунта на крайния потребител. Най-добрият начин зависи от ситуацията, която имате във вашата среда.