Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 MSSQL VBS Excel.application  [new]
x1mar1g
Member

Откуда:
Сообщений: 23
Добрый день.

Возникла необходимость обновления файла Excel и отправлять эти данные по почте.
Во время реализации этой задачи сложилась следующая ситуация.

При запуске VB скрипта с сервера

DECLARE @cmd varchar(256)
SET @cmd = 'E:\1\refresh.vbs'
exec master..xp_cmdshell @cmd


Скрипт нормально запускается под "правильным" пользователем, но реализованный запуск екселя внутри скрипта открывается под "рандомным активным пользователем" из-за чего скрипт вылетает(повисает на ошибках екселя).

Set app = CreateObject("Excel.Application")
app.Visible = false
app.DisplayAlerts = false
app.Workbooks.Open ("E:\1\Шаблон.xls")
app.Run "Module1.main"
app.Workbooks("Шаблон.xls").Saveas ("E:\1\trash_shablon\ШАБЛОН " & Date & ".xls")
app.Workbooks.Close
app.Quit
Set app=nothing


Можно ли как-то исправить такую проблему или возможно ли вызывать "CreateObject("Excel.Application")" под определенным пользователем?
8 июл 15, 10:03    [17865930]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL VBS Excel.application  [new]
x1mar1g
Member

Откуда:
Сообщений: 23
Так же для проверки был написан скрипт, чтобы убедиться в правильности логина.

Dim WshNetwork
Dim Username

Set WshNetwork = CreateObject("WScript.Network")

Username = WshNetwork.Username 
Wscript.Echo Username
Set app = CreateObject("Excel.Application")
app.Visible = true
app.DisplayAlerts = false
app.Workbooks.Open ("E:\1\test.xls")
app.Run "Module1.test"
app.Workbooks("test.xls").Saveas ("E:\1\trash_shablon\test.xls")
app.Workbooks.Close
app.Quit
Set app=nothing


и

Sub test()
Dim UserName As String
Dim WshNetwork As Object
Set WshNetwork = CreateObject("WScript.Network")
UserName = WshNetwork.UserName

Cells(1, 1) = UserName

End Sub



При запуске в ручную скрипт и макрос возращают логин запустившего, но если запустить с сервера, то vbs возвращает логин авторизации сервера, а vba логин другого пользователя.
8 июл 15, 11:25    [17866642]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL VBS Excel.application  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7871
x1mar1g,

Почему Вы не хотите запускать скрипт средствами Планировщик Заданий Windows?
8 июл 15, 14:23    [17867578]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL VBS Excel.application  [new]
x1mar1g
Member

Откуда:
Сообщений: 23
Владислав Колосов,

Потому что перед обновлением екселей необходимо, чтобы отработала процедура, которая подготавливает необходимые данные.
В зависимости от объема данных процедура может выполняться от 5 минут до 1,5 часа, если не возникнет каких либо проблем.
8 июл 15, 14:31    [17867624]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL VBS Excel.application  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7871
x1mar1g,
Об учетной записи, от имени которой выполняется xp_cmdshell хорошо и подробно написано в справке, если Вы об этом. Никаких чудесных превращений логинов там быть не может.
Вам надо описать проксирование и дать требуемые разрешения. Лично я бы сделал экпорт пакетом SSIS без включения разрешений на xp_cmdshell.
8 июл 15, 14:57    [17867793]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL VBS Excel.application  [new]
x1mar1g
Member

Откуда:
Сообщений: 23
Владислав Колосов,

автор
Никаких чудесных превращений логинов там быть не может.

xp_cmdshell настроен на запуск под определенным пользователем(@user1).
А как объяснить следующее:
Запускаем скрипт на сервере.

- cscript открывается под @user1.
- cmd открывается под @user1.
- excel под активным пользователем отличным от @user1.

автор
Лично я бы сделал экпорт пакетом SSIS без включения разрешений на xp_cmdshell.

Я правильно понимаю, что ты предлагаешь реализовать в пакете скрипт "обновления" и "отправку файлов" и тд...
8 июл 15, 15:21    [17867925]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL VBS Excel.application  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7871
x1mar1g,

В пакете можно и процедуру запустить, и Excel заполнить и почтой отправить результат... Там есть все возможности.


excel под активным пользователем отличным от @user1.

Не могу сказать, не силен в WScript тонкостях.
8 июл 15, 15:39    [17868023]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL VBS Excel.application  [new]
x1mar1g
Member

Откуда:
Сообщений: 23
Владислав Колосов,

автор
В пакете можно и процедуру запустить, и Excel заполнить и почтой отправить результат... Там есть все возможности.

Я и забыл что можно на прямую грузить в эксель данные.
Попробую реализовать...

Но все равно интересно почему так происходит -_-
8 июл 15, 16:11    [17868223]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL VBS Excel.application  [new]
Glory
Member

Откуда:
Сообщений: 104760
x1mar1g
xp_cmdshell настроен на запуск под определенным пользователем(@user1).

Каким именно образом настроен ?
8 июл 15, 18:23    [17868977]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL VBS Excel.application  [new]
x1mar1g
Member

Откуда:
Сообщений: 23
Glory
x1mar1g
xp_cmdshell настроен на запуск под определенным пользователем(@user1).

Каким именно образом настроен ?


SQL Server запущен от "Пользователя" из группы Администратор.
Если смотреть на msdn то там написано следующее:

"Процесс Windows, порожденный процедурой xp_cmdshell, имеет те же права защиты, что и учетная запись службы SQL Server."

И это ни каким образом не объясняет почему vb скрипт запускает эксель под случайным пользователем.
9 июл 15, 11:00    [17870821]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL VBS Excel.application  [new]
Glory
Member

Откуда:
Сообщений: 104760
x1mar1g
Если смотреть на msdn то там написано следующее:

"Процесс Windows, порожденный процедурой xp_cmdshell, имеет те же права защиты, что и учетная запись службы SQL Server."

А если смотреть в msdn еще больше, то там еще написано

When it is called by a user that is not a member of the sysadmin fixed server role, xp_cmdshell connects to Windows by using the account name and password stored in the credential named ##xp_cmdshell_proxy_account##. If this proxy credential does not exist, xp_cmdshell will fail.
9 июл 15, 11:02    [17870834]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить