Мне нужно создать экспорт пользовательских данных по требованию на нашем веб-сайте. Пользователь нажимает кнопку экспорта, классический ASP-код выполняет хранимую процедуру, которая генерирует файл через BCP, и пользователю предлагается загрузить его.хранимая процедура для экспорта в CSV с BCP
Я создал sproc, и его работа безупречно выполняется в SSMS. Уловка позволяет ему работать с сайта с ограниченными правами, предоставляемыми учетной записи, подключающейся к SQL с сайта. Вот отрывок:
-- INSERT TEMP DATA
INSERT INTO t_users_tempExport
SELECT * FROM #tempExport
-- show advanced options
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
-- enable xp_cmdshell
EXEC sp_configure 'xp_cmdshell', 1
RECONFIGURE
-- hide advanced options
EXEC sp_configure 'show advanced options', 0
RECONFIGURE
-- EXPORT TO CSV
DECLARE @sql varchar(8000)
SELECT @sql = 'bcp "select * FROM DBNAME.dbo.tempExport WHERE scopeID='''[email protected]+'''" '
+ 'queryout C:\temp\exportResidents_'+CONVERT(varchar(max),@userID)+'.csv -c -t, -T -S'
+ @@servername
EXEC master..xp_cmdshell @sql
-- RETURN FILE NAME
SELECT 'C:\temp\export_'+CONVERT(varchar(max),@userID)+'.csv' AS fileName
Вопрос заключается в том, что я не могу позволить xp_cmdshell с privledges предоставленных учетной записи, которая соединяется с SQL с сайта. Я как бы не понимаю, как действовать дальше.
Можно ли включить учетные данные sysadmin в вызове BCP? Есть ли более простой вариант или работа вокруг?
Не удалось ли вызывать команду BCP из ASP вместо вызова хранимой процедуры? – Spock