Выполнение команд операционной системы на сервере баз данных ms sql без доступа к серверу

Полезный набор команд для некоторых рабочих ситуаций

В работе возможна ситуация, когда нет доступа к административному терминалу сервера субд и нет физического доступа к нему. Но необходимо выполнить определенные комнды на сервере. Случай из практики — sql сервер и сервер 1С установлены на одной машине и необходимо перезапустить службу сервера 1С. Или необходимо создать определенное задание в таск-менеджере операционной системы и т.д.. В ряде случаев (зависит от настроек сервера) при наличии логина к sql server (с 2005) с ролью sysadmin, например «sa», можно получить доступ к командной строке системы и выполнять консольные команды с высокими привилегиями. Ниже описаны действия:

На рабочей станции запускается managment studio и выполняется запрос

EXEC sp_configure ‘show advanced options’, 1
GO

RECONFIGURE
GO

EXEC sp_configure ‘xp_cmdshell’, 1
GO

RECONFIGURE
GO

Подробнее http://technet.microsoft.com/ru-ru/library/ms190693.aspx http://technet.microsoft.com/ru-ru/library/ms175046.aspx

Нам важно, что «Процесс Windows, порожденный процедурой xp_cmdshell, имеет те же права защиты, что и учетная запись службы SQL Server.» Теперь, в большинстве случаев, появится возможность выполнять команды системы сервера с высокими привилегиями. По соображениям безопасности после необходимо отключать данный параметр установкой значения 0.

Примеры запросов с полезными командами:

* копирование файла между каталогами сервера 

EXEC xp_cmdshell ‘copy «C: estlogcfg.xml» «C:Program Files1cv81inconflogcfg.xml» ‘;

* удаление файла на сервере

EXEC xp_cmdshell ‘del «C:Program Files1cv81serversrvribrg.lst» ‘;

* удаление каталога «reg_1541» вместе с его содержимым

EXEC xp_cmdshell ‘rmdir /s /q «C:Program Files1cv81server
eg_1541″‘;

* просмотр запущенных служб

EXEC xp_cmdshell ‘net start’;

* просмотр процессов

EXEC xp_cmdshell ‘tasklist’;

Если сервер 1С установлен на том же сервере:

* остановка службы сервера 1С

EXEC xp_cmdshell ‘net stop «1C:Enterprise 8.1 Server (x86-64) Agent»‘;

* запуск службы сервера 1С

EXEC xp_cmdshell ‘net start «1C:Enterprise 8.1 Server (x86-64) Agent»‘;

* остановка через ragent (запуск -start)

EXEC xp_cmdshell ‘»C:Program Files1cv81in
agent.exe» -stop’;

 

 

 

 

8 Comments

  1. fishca

    Копитан Очевидность

    Reply
  2. avasl

    (1) Добрый день, КЭП )

    Reply
  3. Evgen.Ponomarenko

    (1) fishca, (2) avasl,

    Ну чего вы так сразу? Между прочим — это ж просто дырища в системе безопасности! Я в свое время надругался над серверами соседнего филиала, получаешь доступ к операционной системе и ты король 😉

    Reply
  4. fishca
    Между прочим — это ж просто дырища в системе безопасности!

    (3) это известно любому грамотному администратору SQL сервер.

    (2) КЭП, если ты не понял, как раз ты 😉

    Reply
  5. avasl

    (4) «Горшочек, не вари» 🙂

    Reply
  6. Evgen.Ponomarenko

    (4) fishca,

    пардон, если вы имели в виду MS SQL сервер, то я говорил о DB Oracle.

    К тому же этот пост полезен программистам… смотришь научат уму разуму не пуганных админов MS SQL.

    Хотя часто бывает, что роль админа приходится выполнять и программисту. Так, что не стоит умничать сгоряча.

    Reply
  7. ksuman

    Тоже мне открытие: эта фича была известна ещё со времен MS SQL 7.0

    Защита стандартна: доступ к базам 1С только для отдельной учетной записи с типом db_owner, запрет доступа к другим базам. Изначально при создании базы этот пользователь имеют только привилегии «Database Creator». Сервер 1С под выделенной учетной записью, например: «V8ServerUser@yourdomain», не имеющей никаких прав в домене.

    Reply
  8. zekrus

    Добрый день!

    Тема весьма актуальная.

    А как на счет обратной ситуации,

    выполнение запроса t-sql средствами клиента 1С

    (клиент-сервер без доступа к СУБД)?

    С уважением

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *