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

Откуда:
Сообщений: 166
Добрый день.
SQL2008.
Возник следующий вопрос.
В job'е проверяется значение параметра xp_cmdshell и в зависимости от значения меняется или нет.

Пробовал как-то так:
declare @CmdParam int

SELECT @CmdParam = CAST(value_in_use AS int)
FROM [master].[sys].[configurations]
WHERE name = 'xp_cmdshell'

if @CmdParam = 0
  begin
	exec sp_configure 'show advanced options', 1
	go
	reconfigure
	go
	exec sp_configure 'xp_cmdshell', 1
	go
	reconfigure
	go
  end
  
exec AddNewTraceData

if @CmdParam = 0
  begin
	exec sp_configure 'show advanced options', 1
	go
	reconfigure
	go
	exec sp_configure 'xp_cmdshell', 0
	go
	reconfigure
	go
	exec sp_configure 'show advanced options', 0
	go
	reconfigure
	go
  end


Но вываливается ошибка :
Msg 102, Level 15, State 1, Line 9
Incorrect syntax near '1'.
Configuration option 'xp_cmdshell' changed from 1 to 1. Run the RECONFIGURE statement to install.
Msg 156, Level 15, State 1, Line 3
Incorrect syntax near the keyword 'exec'.
Msg 137, Level 15, State 2, Line 5
Must declare the scalar variable "@CmdParam".
Msg 102, Level 15, State 1, Line 7
Incorrect syntax near '1'.
Configuration option 'xp_cmdshell' changed from 1 to 0. Run the RECONFIGURE statement to install.
Configuration option 'show advanced options' changed from 1 to 0. Run the RECONFIGURE statement to install.
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near 'end'.
4 окт 12, 13:49    [13267500]     Ответить | Цитировать Сообщить модератору
 Re: if .. else  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37050
Прочитайте, что такое "go".
4 окт 12, 13:50    [13267510]     Ответить | Цитировать Сообщить модератору
 Re: if .. else  [new]
icprog
Member

Откуда:
Сообщений: 166
Гавриленко Сергей Алексеевич,
Спасибо за наводку.
Сделал так:
if @CmdParam = 0
  begin
    SET @SQLText ='exec sp_configure ''show advanced options'', 1
	go
	reconfigure
	go
	exec sp_configure ''xp_cmdshell'', 1
	go
	reconfigure
	go'
	exec sp_executesql @SQLText
  end
4 окт 12, 13:59    [13267591]     Ответить | Цитировать Сообщить модератору
 Re: if .. else  [new]
Glory
Member

Откуда:
Сообщений: 104760
icprog
Спасибо за наводку.
Сделал так:

Т.е. так и не узнали, что такое GO ?
4 окт 12, 14:01    [13267611]     Ответить | Цитировать Сообщить модератору
 Re: if .. else  [new]
icprog
Member

Откуда:
Сообщений: 166
Что такое GO я прочитал.
Но без GO не выполнится reconfigure, следовательно невозможно будет изменить значение параметра xp_cmdshell.
Можно ли как-то выполнить указанные действия в блоке begin .. end в if ?
4 окт 12, 14:19    [13267789]     Ответить | Цитировать Сообщить модератору
 Re: if .. else  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37050
icprog
Но без GO не выполнится reconfigure
Отлично выполняется.
4 окт 12, 14:22    [13267821]     Ответить | Цитировать Сообщить модератору
 Re: if .. else  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
icprog
Что такое GO я прочитал.
Но сервер-то не читал!
Он-то не знает, что это такое.
Строка тем не менее именно ему и отправится на обработку
4 окт 12, 14:24    [13267843]     Ответить | Цитировать Сообщить модератору
 Re: if .. else  [new]
icprog
Member

Откуда:
Сообщений: 166
Всем большое спасибо, вопрос закрыт.
Действительно без GO все замечательно заработало видимо в коде где-то была опечатка.
4 окт 12, 14:27    [13267885]     Ответить | Цитировать Сообщить модератору
 Re: if .. else  [new]
icprog
Member

Откуда:
Сообщений: 166
Заодно, хочу уточнить следующий момент:
Правильно ля я понял, что если на сервере разрешить параметр xp_cmdshell, то получется, что любой пользователь подключившийся к SQL серверу может выполнить команду, например exec xp_cmdshell 'del C:\имяфайла' и эта команда будет выполнена от имени учетной записи, под которой запущен SQl-сервер?
4 окт 12, 14:36    [13268000]     Ответить | Цитировать Сообщить модератору
 Re: if .. else  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31429
icprog
Заодно, хочу уточнить следующий момент:
Правильно ля я понял, что если на сервере разрешить параметр xp_cmdshell, то получется, что любой пользователь подключившийся к SQL серверу может выполнить команду, например exec xp_cmdshell 'del C:\имяфайла' и эта команда будет выполнена от имени учетной записи, под которой запущен SQl-сервер?
Нет.

В описании xp_cmdshell ведь написано, какой именно пользователь может её выполнить.
4 окт 12, 14:41    [13268062]     Ответить | Цитировать Сообщить модератору
 Re: if .. else  [new]
icprog
Member

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

Т.е. использовать эту команду могут только члены роли sysadmin ?
4 окт 12, 14:48    [13268155]     Ответить | Цитировать Сообщить модератору
 Re: if .. else  [new]
Maxx
Member [скрыт]

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

xp_cmdschell
Читаем про разрешения
4 окт 12, 14:50    [13268174]     Ответить | Цитировать Сообщить модератору
 Re: if .. else  [new]
icprog
Member

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

Получается, запустить ее могут те, кто имеет разрешение CONTROL SERVER
4 окт 12, 15:12    [13268358]     Ответить | Цитировать Сообщить модератору
 Re: if .. else  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3264
icprog
Maxx,

Получается, запустить ее могут те, кто имеет разрешение CONTROL SERVER


ну если и с английским туго, то msdn давно переаедён
http://msdn.microsoft.com/ru-ru/library/ms175046.aspx
4 окт 12, 15:15    [13268387]     Ответить | Цитировать Сообщить модератору
 Re: if .. else  [new]
Glory
Member

Откуда:
Сообщений: 104760
icprog
Получается, запустить ее могут те, кто имеет разрешение CONTROL SERVER

Вы путаете права на запуск процедуры с правами, под которым процедура будет выполнять свои действия
4 окт 12, 15:17    [13268408]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить