Разное

Включить xp cmdshell: Включение расширенной процедуры xp_cmdshell в MS SQL

Содержание

Включить «xp cmdshell» SQL Server

Я хочу, чтобы выполнить EXEC master..xp_cmdshell @bcpquery

, но я получаю следующую ошибку:

SQL Server заблокировал доступ к процедуре sys.xp_cmdshell «компонента » xp_cmdshell», поскольку этот компонент отключен как часть конфигурации безопасности для этого сервера. Системный администратор может включить использование «xp_cmdshell» с помощью sp_configure. Дополнительные сведения о включении «xp_cmdshell» см. В разделе «Конфигурация поверхности» в книгах SQL Server Онлайн.

есть ли способ активировать это или выполнить что-то перед включением функции?

как ее решить?

155

автор: Md. Suman Kabir

6 ответов


вы должны включить его. Проверьте раздел разрешений xp_cmdshell MSDN docs:

http://msdn.microsoft.com/en-us/library/ms190693.aspx:

-- To allow advanced options to be changed.
EXEC sp_configure 'show advanced options', 1
GO
-- To update the currently configured value for advanced options.
RECONFIGURE
GO
-- To enable the feature.
EXEC sp_configure 'xp_cmdshell', 1
GO
-- To update the currently configured value for this feature.
RECONFIGURE
GO

вы также можете снова скрыть расширенный параметр после перенастройки:

-- show advanced options
EXEC sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
-- enable xp_cmdshell
EXEC sp_configure 'xp_cmdshell', 1
GO
RECONFIGURE
GO
-- hide advanced options
EXEC sp_configure 'show advanced options', 0
GO
RECONFIGURE
GO

щелкните правой кнопкой мыши сервер —>фасеты— > конфигурация поверхности —>XPCmshellEnbled — > true

12

автор: dinesh vishe


как указано в других ответах, трюк (в SQL 2005 или более поздней версии) заключается в изменении глобальных параметров конфигурации для show advanced options и xp_cmdshell to 1 — в таком порядке.

добавление к этому, если вы хотите сохранить предыдущие значения, вы можете их читать от sys.configurations во-первых, а затем применить их в обратном порядке в конце. Мы также можем избежать ненужных reconfigure вызовы:

declare @prevAdvancedOptions int
declare @prevXpCmdshell int

select @prevAdvancedOptions = cast(value_in_use as int) from sys.configurations where name = 'show advanced options'
select @prevXpCmdshell = cast(value_in_use as int) from sys.configurations where name = 'xp_cmdshell'

if (@prevAdvancedOptions = 0)
begin
    exec sp_configure 'show advanced options', 1
    reconfigure
end

if (@prevXpCmdshell = 0)
begin
    exec sp_configure 'xp_cmdshell', 1
    reconfigure
end

/* do work */

if (@prevXpCmdshell = 0)
begin
    exec sp_configure 'xp_cmdshell', 0
    reconfigure
end

if (@prevAdvancedOptions = 0)
begin
    exec sp_configure 'show advanced options', 0
    reconfigure
end

обратите внимание, что это зависит от SQL Server версия 2005 или более поздняя (первоначальный вопрос был для 2008).


В то время как принятый ответ будет работать большую часть времени, я столкнулся (до сих пор не знаю, почему) некоторые случаи, которые не делает. Небольшое изменение запроса с помощью WITH OVERRIDE на RECONFIGURE решение

Use Master
GO

EXEC master.dbo.sp_configure 'show advanced options', 1
RECONFIGURE WITH OVERRIDE
GO

EXEC master.dbo.sp_configure 'xp_cmdshell', 1
RECONFIGURE WITH OVERRIDE
GO

ожидаемый результат

параметр конфигурации «Показать дополнительные параметры» изменен с 0 на 1. Запустите инструкцию RECONFIGURE для установки.
Параметр конфигурации ‘xp_cmdshell’ изменен с 0 на 1. Запустить перенастройку инструкция для установки.


вы можете сделать с помощью SQLcmd.
вы выполнили следующую команду.

-1

автор: dinesh vishe


История одной глупости / Хабр

Небольшая история о xp_cmdshell, хранимой процедуры из Microsoft Sql Server.

Стоит на на домашнем компьютере у меня Sql Server 2008 Express, использую ее для разработок Бд различных. Понадобилось мне как-то связываться с ней удаленно. Включил TCP протокол на нестандартный порт, настроил стандартный виндовый брандмауер, отключил sa врубив отдельную учетку для редактирования только одной базы. Все было настроено — работало замечательно.

И вот однажды понадобился мне срочно доступ к одному файлу на домашнем компьютере, причем где он находится и как называется было забыто (файл давний был). Ситуация была такова, что никаких других доступов к компьютеру у меня не было, ни стандартного rdp, ни каких-то сторонних приложений. В распоряжении была только жена, которая может сделать с компом по указке в принципе все что угодно, кроме разве что самостоятельного поиска нужного файла.

Все что я сделал попросил выйти ее из своего сеанса и войти под моей учеткой (сбросил ее пароль по СМС), включить Managment Studio и активировать логин sa с паролем 123456 (я как я надеялся всего на пару часов). Когда процедура была выполнена — я смог спокойно залогинится под sa. После этого первым делом я разрешил выполнения xp_cmdshell, и приступил к поискам файла через консоль. Через «пару» часов файл был найден и скопирован в доступное для жены место. Получив файл через Skype я благополучно забыл про «образовавшуюся дыру».

После этого прошло несколько дней. Слава богу за это время домашний компьютер не использовался. Буквально сегодня, после того как я сел за компьютер, взбесился антивирус: в течении 10 минут он 3 раза блокировал файл из папки System32. По описанию это оказывался один из вирусов данного семейства www.securelist.com/ru/descriptions/115419/Trojan-Downloader.BAT.Ftp.ab. Я долго не мог понять, что же может умудрится записать в данную папку: uac никогда не отключаю, все программы, требующие прав администратора, проверяю — ну не мог вирус просочиться так просто. Мониторинг папки System32 не дал результата — файл не успевал в ней появляться, как антивирус сразу же его блокировал. Стандартный виндовый Task Manager не показывал никакой аномальной активности… но у меня кроме него стоит еще Process Explorer. Запустив его — сразу же бросился в глаза дочерний процесс cmd от службы sql server, который в свою очередь запустил процесс ftp. Тут же вспомнил, что я не отключил ни sa ни тем более xp_cmdshell. В первую очередь вырубил доступ в файрволе, и лишь затем отключил sa, а за ней и xp_cmdshell — после этого антивирус успокоился.

Во все этой ситуации меня поразило только одно — как быстро просканировали открытый нестандартный порт и попытались воспользоваться этой «дырой».

Вывод понятно один — сам дурак. Однако, если бы не антивирус, я наверное еще долго не вспомнил про открытый доступ к компьютеру.

А для тех, кто еще сомневается, хочу сказать, что любая дыра в вашем компьютере может быть кем то обнаружена в тот же миг как она появится.

UPD Эх почему я так часто не смотрю Event Log, попытки доступа к SQL Server’у начались сразу же после открытия порта. Еще за месяц до указанных событий, начались попытки подбора паролей к несуществующим логинам. Только когда был открыт логин sa — эти попытки смогли увенчаться некоторым успехом. Все ip с внутренней сетки провайдера — судя по всему либо у кого-то вирус, либо кто-то хорошо лоханулся…

Получение разрешения на выполнение на XP cmdshell

чтобы расширить то, что было предоставлено для автоматического экспорта данных в виде csv в сетевой ресурс через агент SQL Server.

(1) включить процедуру xp_cmdshell:

-- To allow advanced options to be changed.
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO

-- Enable the xp_cmdshell procedure
EXEC sp_configure 'xp_cmdshell', 1
RECONFIGURE
GO

(2) Создайте логин «Domain\TestUser» (пользователь windows) для пользователя, не являющегося sysadmin, который имеет открытый доступ к базе данных master. Сделано через отображение пользователя

(3) Дайте вход в систему как пакетное задание: перейдите к локальной политике безопасности -> Локальные политики -> назначение прав пользователя. Добавить пользователя в «Войдите в систему как пакетное задание»

(4) Дайте разрешения на чтение/запись в сетевую папку для домена\user

(5) предоставьте EXEC разрешение на хранимую процедуру xp_cmdshell:

GRANT EXECUTE ON xp_cmdshell TO [Domain\TestUser]

(6) создайте учетную запись прокси-сервера, под которой xp_cmdshell будет работать с помощью sp_xp_cmdshell_proxy_account

EXEC sp_xp_cmdshell_proxy_account 'Domain\TestUser', 'password_for_domain_user'

(7) Если команда sp_xp_cmdshell_proxy_account не работает, создайте ее вручную

create credential ##xp_cmdshell_proxy_account## with identity = 'Domain\DomainUser', secret = 'password'

(8) включить агент SQL Server. Открыть SQL Server Configuration Manager, перейдите к службам SQL Server, включите агент SQL Server.

(9) создание автоматизированных рабочих мест. Откройте SSMS, выберите агент SQL Server, затем щелкните правой кнопкой мыши задания и выберите «новое задание».

(10) Выберите «владелец» в качестве созданного пользователя. Выберите «шаги», сделайте» type » = T-SQL. Заполните поле команды, подобное приведенному ниже. Установите разделитель как ‘,’

EXEC master..xp_cmdshell 'SQLCMD -q "select * from master" -o file.csv -s "," 

(11) заполните графики соответственно.

Включить ‘xp_cmdshell’ SQL Сервер — sql-server-2008

Я хочу выполнить EXEC master..xp_cmdshell @bcpquery

Но я получаю следующую ошибку:

SQL сервер заблокировал доступ к процедуре » sys.xp_cmdshell » компонента ‘xp_cmdshell’, так как этот компонент отключен как часть конфигурации безопасности для данного сервера. Системный администратор может включить использование ‘xp_cmdshell’ с помощью процедуры sp_configure. Дополнительные сведения о включении ‘xp_cmdshell’ см. В разделе «Surface Area Configuration» в электронной документации по серверу SQL.

Есть ли какой-либо способ активировать это или выполнить что-то перед включением функции?

Как ее решить?

sql-server-2008

Поделиться

Источник


cMinor    

27 февраля 2011 в 04:40

7 Ответов



353

Вам нужно включить его. Ознакомьтесь с разделом разрешений документа xp_cmdshell MSDN :

http://msdn.microsoft.com/en-us/library/ms190693.aspx :

-- To allow advanced options to be changed.
EXEC sp_configure 'show advanced options', 1
GO
-- To update the currently configured value for advanced options.
RECONFIGURE
GO
-- To enable the feature.
EXEC sp_configure 'xp_cmdshell', 1
GO
-- To update the currently configured value for this feature.
RECONFIGURE
GO

Поделиться


Pero P.    

27 февраля 2011 в 04:43



37

Вы также можете снова скрыть расширенный вариант после перенастройки:

-- show advanced options
EXEC sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
-- enable xp_cmdshell
EXEC sp_configure 'xp_cmdshell', 1
GO
RECONFIGURE
GO
-- hide advanced options
EXEC sp_configure 'show advanced options', 0
GO
RECONFIGURE
GO

Поделиться


hoggar    

30 апреля 2014 в 00:39



14

Щелкните правой кнопкой мыши сервер —>фасеты—>конфигурация поверхности —>XPCmshellEnbled — > true

Поделиться


arnav    

15 ноября 2016 в 06:57



9

Как указано в других ответах, хитрость (в SQL 2005 или более поздней версии) состоит в том , чтобы изменить глобальные параметры конфигурации для show advanced options и xp_cmdshell на 1 в этом порядке.

Кроме того, если вы хотите сохранить предыдущие значения, вы можете сначала прочитать их из sys.configurations , а затем применить их в обратном порядке в конце. Мы также можем избежать ненужных вызовов reconfigure :

declare @prevAdvancedOptions int
declare @prevXpCmdshell int

select @prevAdvancedOptions = cast(value_in_use as int) from sys.configurations where name = 'show advanced options'
select @prevXpCmdshell = cast(value_in_use as int) from sys.configurations where name = 'xp_cmdshell'

if (@prevAdvancedOptions = 0)
begin
    exec sp_configure 'show advanced options', 1
    reconfigure
end

if (@prevXpCmdshell = 0)
begin
    exec sp_configure 'xp_cmdshell', 1
    reconfigure
end

/* do work */

if (@prevXpCmdshell = 0)
begin
    exec sp_configure 'xp_cmdshell', 0
    reconfigure
end

if (@prevAdvancedOptions = 0)
begin
    exec sp_configure 'show advanced options', 0
    reconfigure
end

Обратите внимание, что это зависит от версии сервера SQL 2005 или более поздней (исходный вопрос был для 2008 года).

Поделиться


Geoff    

24 апреля 2015 в 14:06



4

Хотя принятый ответ будет работать в большинстве случаев, я столкнулся (до сих пор не знаю, почему) с некоторыми случаями, которые не работают. Небольшое изменение запроса с помощью WITH OVERRIDE в RECONFIGURE дает решение

Use Master
GO

EXEC master.dbo.sp_configure 'show advanced options', 1
RECONFIGURE WITH OVERRIDE
GO

EXEC master.dbo.sp_configure 'xp_cmdshell', 1
RECONFIGURE WITH OVERRIDE
GO

Ожидаемый результат:

Параметр конфигурации «Показать дополнительные параметры» изменен с 0 на 1. Запустите инструкцию RECONFIGURE для установки.

Параметр конфигурации ‘xp_cmdshell’ изменен с 0 на 1. Запустите инструкцию RECONFIGURE для установки.

Поделиться


Athafoud    

18 ноября 2015 в 12:50



0

Для меня единственным способом на SQL 2008 R2 было это :

EXEC sp_configure 'Show Advanced Options', 1    
RECONFIGURE **WITH OVERRIDE**    
EXEC sp_configure 'xp_cmdshell', 1    
RECONFIGURE **WITH OVERRIDE**

Поделиться


David Bru    

07 ноября 2018 в 02:33



-1

Вы можете сделать это с помощью SQLcmd.
вы выполнили следующую команду.

Поделиться


arnav    

18 января 2017 в 16:03


Похожие вопросы:

SQL exec для процедуры xp_cmdshell

Я решаюсь на инъекцию SQL за последние несколько дней. Я могу использовать уязвимость инъекции SQL для обхода входа в систему и пинга обратно на мою атакующую машину из той же точки инъекции,…

xp_cmdshell на сервере SQL Linux публичный просмотр

Я использую публичный предварительный просмотр SQL Server 2016 на Linux. Я пытаюсь запустить xp_cmdshell и получить следующую ошибку. Я подозреваю, что это связано с разрешениями, но понятия не…

Включить xp_cmdshell не работает

Я пытаюсь включить xp_cmdshell в SQL сервере. Поэтому я побежал: EXEC master.dbo.sp_configure ‘show advanced options’, 1 RECONFIGURE EXEC master.dbo.sp_configure ‘xp_cmdshell’, 1 RECONFIGURE В…

как я могу получить доступ к файлу / папке по сети через XP_CMDSHELL в sql server 2008?

Я пытаюсь получить доступ к папке / каталогу с помощью ‘EXEC MASTER..XP_CMDSHELL’ он работает для локального file/folder,, как никогда он не может получить доступ к папке по сети. EXEC…

SQL сервер xp_cmdshell Ошибка 5

Когда я выполняю следующий оператор в SQL Server 2008: declare @s varchar(100) set @s=’dir’ exec sp_configure ‘show advanced options’,1 reconfigure exec sp_configure ‘xp_cmdshell’,1 reconfigure exec…

SQL Server: как включить / перенастроить xp_cmdshell через связанный сервер

Поэтому я хочу включить xp_cmdshell через связанный сервер. Это моя попытка: set @execute = ‘exec ‘+'[‘[email protected]_ip+’]’+’.master..sp_configure »xp_cmdshell», 1;’ set @reconfigure = ‘exec…

Эквивалент XP_CMDSHELL в Azureb

Я использую сервер SQL в качестве службы на MS Azure VM, и я хотел бы использовать xp_cmdshell в хранимой процедуре, но я получаю следующее сообщение об ошибке / информации: Модуль…

Сервер SQL 2000 процедуры xp_cmdshell

Используя SQL Server 2000, я пытаюсь использовать эту команду в Анализаторе запросов xp_cmdshell ‘del c:\delete-me-file.txt’ и я получаю эту ошибку: Сервер: Msg 2812, Уровень 16, Состояние 62,…

Почему xp_cmdshell не работает в SQL Server 2012?

Возможный Дубликат : Включите процедуры xp_cmdshell’ сервер SQL Когда я запускаю команду xp_cmdshell в SQL Server 2012, я получаю следующее сообщение: SQL сервер заблокировал доступ к процедуре ‘…

SQL Server 2005 xp_cmdshell

Следующий код отлично работает при выполнении непосредственно на сервере Sql: DECLARE @cmd sysname set @cmd = ‘dir C:\A_Projects’ EXEC master..xp_cmdshell @cmd но когда я пытаюсь создать хранимую…

Выполните команду xp_cmdshell от имени конкретного пользователя — sql-server

Я хотел бы запустить xp_cmdshell (TSQL процедура)для того, чтобы mount сетевой диск, а затем получить доступ к удаленным mdb-файлам.

Я являюсь администратором на сервере MS SQL, и я разрешил выполнение xp_cmdshell соответственно.

Однако есть еще одна проблема:

  • Когда я вызываю xp_cmdshell, пользователь, выполняющий команду, является SQL SysAdmin, т. е. учетная запись, которая запускает серверный процесс SQL.

  • Я хочу, чтобы xp_cmdshell выполнялся как учетная запись, с которой я связан с сервером SQL, то есть администратором

Обе эти учетные записи находятся в группе администраторов, SQLAdmin group,и предоставляются серверу управления. Оба пользователя принадлежат к одному домену. Все это выполняется на одной машине.

Из-за этого конфликта я не могу использовать сетевой диск, так как он монтируется для SysAdmin , а не для администратора

Я попытался использовать sp_ xp_ cmdshell_ proxy_ account , чтобы указать учетную запись , с которой я хочу запустить xp_cmdshell, но SysAdmin по-прежнему используется учетная запись.

Поэтому данный код :

select user_name(), suser_name;

exec xp_cmdshell 'echo %username%';

дисплеи :

Administrator Administrator

SysAdmin

Кто-нибудь знает, как хорошо имитировать команду xp_cmdshell ? Есть ли что-то, чтобы (повторно)настроить?

Спасибо за вашу помощь.

sql-server

windows

tsql

shell

Поделиться

Источник


Antwan    

07 июля 2009 в 12:55

7 Ответов



8

Поскольку вы подключаетесь к SQL как вход в группу sysadmin, xp_cmdshell запускается как учетная запись службы.

Если вы подключаетесь как логин с низким уровнем привилегий, то он будет использовать xp_cmdshell_proxy_account вместо этого. Поэтому попробуйте сначала сделать EXECUTE AS LOGIN='lowprivaccount' , чтобы посмотреть, поможет ли это.

Конечно, то, что вы на самом деле просите, не является ожидаемым использованием. Ожидаемое использование заключается в том, что учетные записи с высокими привилегиями могут разрешить xp_cmdshell использовать учетную запись службы, в то время как все остальные должны мириться с учетной записью прокси-сервера с более низкими привилегиями.

Поделиться


Rob Farley    

27 июля 2009 в 03:57



3

Мне действительно приходилось использовать этот метод в прошлом для подобных вещей на общих сетевых ресурсах, попробуйте это…

— сопоставьте свой диск и сделайте его постоянным.

процедуры xp_cmdshell»чистый использовать Т: \\<server>\<share> <password> /user:<username> /persistent:yes»

— код t-sql использование привода t

— удалить сопоставление диска xp_cmdshell » net use t: /delete»

вы можете фактически настроить задание, которое будет выполняться при запуске службы sql, и сопоставить его с этим диском, чтобы у вас всегда был доступ к общему ресурсу, пока работает служба sql. Все, что вам нужно сделать, это настроить sproc, который сопоставляет диск, и заставить его выполнить начальное сопоставление диска и использовать sp_procoption ( http://msdn.microsoft.com/en-us/library/ms181720.aspx )

Поделиться


tcnolan    

03 августа 2009 в 18:37



1

Может быть, вы попробуете PsExec? Загрузите файл по адресу this URL и скопируйте его в папку, входящую в переменную окружения %Path%.

http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx

exec xp_cmdshell 'psexec -u Administrator -p password net use ...'

Поделиться


»    

07 июля 2009 в 20:02



0

Вы можете попробовать «net use» с именем пользователя и паролем внутри xp_cmdshell. Это устанавливает учетные данные для подключения к UNC.

Однако я не уверен, как долго это будет продолжаться. Если он сохраняется неопределенно долго (например, до перезагрузки сервера), вы можете иметь стартовую хранимую процедуру, которая делает «net use» и гарантирует, что она будет доступна для использования позже.

Последующая xp_cmdshell (для доступа к файлам MDB) не потребует проверки подлинности, поскольку учетные данные уже установлены в OS.

Поделиться


gbn    

12 июля 2009 в 14:01


Поделиться


Tyler W. Cox    

03 августа 2016 в 19:56



-1

После перезапуска сервера, необходимо выполнить команду команду место сохранить решение…

Use Master GO

EXEC master.dbo.sp_configure 'show advanced options', 1 RECONFIGURE WITH 
OVERRIDE GO

EXEC master.dbo.sp_configure 'xp_cmdshell', 1 RECONFIGURE WITH OVERRIDE GO

exec xp_cmdshell 'net use \ip\xxx pass /user:xxx /persistent:no'

Use Master GO

EXEC master.dbo.sp_configure 'show advanced options', 1 RECONFIGURE WITH 
OVERRIDE GO

EXEC master.dbo.sp_configure 'xp_cmdshell', 0 RECONFIGURE WITH OVERRIDE

Поделиться


saeed    

23 марта 2016 в 06:08



-2

Необходимо создать хранимую процедуру, в которую будет помещен скрипт xp_cmdshell.

Хранимая процедура выполняется с использованием учетной записи администратора, поэтому ваш xp_cmdshell будет успешно запущен при выполнении хранимой процедуры

create procedure RunShellIndirectly

as

declare @tawandachinaka as varchar(50)

set @tawandachinaka='DIR "c:\scrap measurement\"*.csv /B' 

EXEC xp_cmdshell @tawandachinaka

Поделиться


user2385875    

15 мая 2013 в 12:34


Похожие вопросы:

Получить результаты от XP_CMDSHELL

Я немного поискал в интернете, и мне кажется, что единственный способ получить результаты от XP_CMDSHELL-это сохранить их в временной таблице. Неужели нет более легкого пути? От Экспертов Биржи:…

Как выполнить команду от имени конкретного пользователя в сценарии инициализации?

Я пишу сценарий init, который должен выполнять одну команду от имени пользователя, отличного от root. Вот как я сейчас это делаю: sudo -u username command Это обычно работает как ожидалось на…

Выполните команду от имени обычного пользователя из сценария с повышенными правами sudo

Если сценарий bash был выполнен с sudo, как команда в сценарии может выполняться как текущий пользователь, вошедший в систему, а не root, а затем вернуться к root, чтобы продолжить выполнение других…

Доступ запрещен для включенного xp_cmdshell для администратора пользователя

Я использую xp_cmdshell в триггере базы данных для запуска файла exe. xp_cmdshell включен(он может выполнять простую команду cmd, например ‘echo’). Но когда я пытаюсь запустить exe через…

Запустите приложение Yesod от имени конкретного пользователя с помощью Keter

Как я могу попросить Keter запустить мое приложение Yesod от имени конкретного пользователя? Запуск от имени root не кажется очень безопасным. Кроме того, мое приложение вызывает внешнюю команду,…

PHP: запуск exec от имени конкретного пользователя

Возможный Дубликат : Запуск приложения командной строки из PHP от имени конкретного пользователя У меня есть скрипт, который мне нужно запустить из сценария PHP, и он должен быть запущен от имени…

Выполнение скрипта от имени конкретного пользователя

У меня есть скрипт python, который выполняет некоторую обработку файлов и должен запускаться от имени конкретного пользователя. Кажется, на Unix это можно сделать с помощью os.setuid. Как мне это…

Отправить сообщение Slack от имени конкретного пользователя

Я создаю Slack bot с командами slash, и я хотел бы опубликовать сообщение с вложением в качестве конкретного пользователя (в частности, пользователя, который вызвал команду slash). Я знаю, что это…

Как я могу получить последний твит от конкретного пользователя и конкретного хэштега

Могу ли я узнать, как получить последний твит от конкретного пользователя и конкретного хэштега На twitter сделать опцию поиска без параметров имя пользователя или идентификатор пользователя…

Пакетный файл: отбросьте повышенные привилегии (выполните команду от имени исходного пользователя)

У меня есть пакетный файл, который запускается с повышенными привилегиями (мой установщик порождает его), но в определенный момент мне нужно выполнить команду от имени исходного пользователя,…

Получение разрешения на выполнение для xp_cmdshell — sql-server

Я вижу сообщение об ошибке при попытке выполнить xp_cmdshell из хранимой процедуры.

xp_cmdshell включен на экземпляре. И разрешение на выполнение было предоставлено моему пользователю, но я все еще вижу исключение.

Разрешение EXECUTE было отказано на объекте ‘процедуры xp_cmdshell’, база данных ‘файла mssqlsystemresource «схемы» Сыс’

Частично проблема заключается в том, что это общий кластер, и у нас есть одна база данных на экземпляре, поэтому у нас нет полного набора разрешений администратора. Так что я не могу войти и дать разрешение, а что-нет.

sql-server

database

xp-cmdshell

Поделиться

Источник


David Griffiths    

06 января 2010 в 22:13

4 Ответов



55

Для пользователей, не являющихся членами роли sysadmin на экземпляре сервера SQL, необходимо выполнить следующие действия, чтобы предоставить доступ к расширенной хранимой процедуре xp_cmdshell. Кроме того, если вы забыли один из шагов, я перечислил ошибку, которая будет выброшена.

  1. Обеспечения процедуры процедуры xp_cmdshell

    Msg 15281, Уровень 16, состояние 1, процедура xp_cmdshell, строка 1
    SQL сервер заблокировал доступ к процедуре ‘ sys.xp_cmdshell ‘ компонента ‘xp_cmdshell’, так как этот компонент отключен как часть конфигурации безопасности для данного сервера. Системный администратор может включить использование ‘xp_cmdshell’ с помощью процедуры sp_configure. Дополнительные сведения о включении ‘xp_cmdshell’ см. В разделе «Surface Area Configuration» в электронной документации по серверу SQL.*

  2. Создайте имя входа для пользователя не sysadmin, имеющего открытый доступ к базе данных master

    Msg 229, Уровень 14, Состояние 5, процедура xp_cmdshell, строка 1
    Разрешение EXECUTE было отклонено для объекта ‘xp_cmdshell’, базы данных ‘mssqlsystemresource’, схемы ‘sys’.*

  3. Предоставьте разрешение EXEC на хранимую процедуру xp_cmdshell

    Msg 229, Уровень 14, Состояние 5, процедура xp_cmdshell, строка 1
    Разрешение EXECUTE было отклонено для объекта ‘xp_cmdshell’, базы данных ‘mssqlsystemresource’, схемы ‘sys’.*

  4. Создайте учетную запись прокси-сервера, под которой xp_cmdshell будет выполняться с помощью sp_xp_cmdshell_proxy_account

    Msg 15153, Уровень 16, состояние 1, процедура xp_cmdshell, строка 1
    Информация об учетной записи прокси-сервера xp_cmdshell не может быть получена или является недопустимой. Убедитесь, что учетные данные ‘##xp_cmdshell_proxy_account##’ существуют и содержат допустимую информацию.*

Судя по вашей ошибке, либо Шаг 2, либо Шаг 3 был пропущен. Я не знаком с кластерами, чтобы знать, есть ли что-то особенное в этой установке.

Поделиться


»    

08 января 2010 в 16:25



44

Я хочу закончить ответ из тчестера.

(1) Включите процедуру xp_cmdshell:

-- To allow advanced options to be changed.
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO

-- Enable the xp_cmdshell procedure
EXEC sp_configure 'xp_cmdshell', 1
RECONFIGURE
GO

(2) Создайте логин » Domain\TestUser » (windows пользователя) для пользователя, не являющегося пользователем sysadmin, который имеет открытый доступ к базе данных master

(3) предоставьте разрешение EXEC на хранимую процедуру xp_cmdshell:

GRANT EXECUTE ON xp_cmdshell TO [Domain\TestUser]

(4) создайте учетную запись прокси-сервера, под которой xp_cmdshell будет выполняться с помощью sp_xp_cmdshell_proxy_account

EXEC sp_xp_cmdshell_proxy_account 'Domain\TestUser', 'pwd'
-- Note: pwd means windows password for [Domain\TestUser] account id on the box.
--       Don't include square brackets around Domain\TestUser.

(5) предоставить пользователю разрешение сервера управления

USE master;
GRANT CONTROL SERVER TO [Domain\TestUser]
GO

Поделиться


nZeus    

28 ноября 2012 в 13:12



1

— сказал тчестер :

(2) Создайте имя входа для пользователя, не являющегося sysadmin, который имеет открытый доступ к базе данных master

Я перешел к списку базы данных моего пользователя (server/security/connections/my user name/properties/user) и хотел установить флажок для базы данных master. Я получил сообщение об ошибке, сообщающее, что пользователь уже существует в базе данных master. Зашел в базу данных master, сбросил пользователя, вернулся к «user mapping» и поставил галочку в поле master. Установите флажок «public» ниже.

После этого, Вам необходимо повторно оформить разрешения execute на процедуру xp_cmdshell на «my user name»

Ива

Поделиться


Yves Forget    

17 сентября 2012 в 17:08



0

Подробнее о том, что было предусмотрено для автоматического экспорта данных в виде csv в общий сетевой ресурс через SQL Server Agent.

(1) Включите процедуру xp_cmdshell:

-- To allow advanced options to be changed.
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO

-- Enable the xp_cmdshell procedure
EXEC sp_configure 'xp_cmdshell', 1
RECONFIGURE
GO

(2) Создайте имя Входа » Domain\TestUser » (windows пользователя) для пользователя, не являющегося пользователем sysadmin, который имеет открытый доступ к базе данных master. Сделано через сопоставление пользователей

(3) Дайте вход в систему как пакетное задание: перейдите к локальной политике безопасности -> Локальные политики -> назначение прав пользователя. Добавить пользователя в «Log on as a batch job»

(4) дайте разрешение на чтение/запись в сетевую папку для domain\user

(5) предоставьте разрешение EXEC на хранимую процедуру xp_cmdshell:

GRANT EXECUTE ON xp_cmdshell TO [Domain\TestUser]

(6) создайте учетную запись прокси-сервера, под которой xp_cmdshell будет выполняться с помощью sp_xp_cmdshell_proxy_account

EXEC sp_xp_cmdshell_proxy_account 'Domain\TestUser', 'password_for_domain_user'

(7) Если команда sp_xp_cmdshell_proxy_account не работает, создайте ее вручную

create credential ##xp_cmdshell_proxy_account## with identity = 'Domain\DomainUser', secret = 'password'

(8)Включите Агент Сервера SQL. Откройте SQL Server Configuration Manager, перейдите к SQL Server Services, включите SQL Server Agent.

(9) создание автоматизированного задания. Откройте SSMS, выберите SQL Server Agent, затем щелкните правой кнопкой мыши jobs и выберите «New Job».

(10) Выберите «Owner» в качестве созданного пользователя. Выберите «Steps», сделайте «type» = T-SQL. Заполните командное поле аналогично приведенному ниже. Установите разделитель как ‘,’

EXEC master..xp_cmdshell 'SQLCMD -q "select * from master" -o file.csv -s "," 

(11) заполняйте соответствующие графики.

Поделиться


Schylar    

06 марта 2018 в 20:23


Похожие вопросы:

Получить результаты от XP_CMDSHELL

Я немного поискал в интернете, и мне кажется, что единственный способ получить результаты от XP_CMDSHELL-это сохранить их в временной таблице. Неужели нет более легкого пути? От Экспертов Биржи:…

было отказано в разрешении на объект xp_cmdshell

Я получаю разрешение на выполнение было отказано на объекте ‘xp_cmdshell’. Вот такая ситуация, у меня есть хранимая процедура под названием ExportFile. Я вызываю хранимую процедуру через SqlCommand…

выполнение xp_cmdshell на удаленном сервере

RECONFIGURE EXEC sp_configure ‘xp_cmdshell’,1 declare @cmdstring varchar(1000) set @cmdstring = ‘copy D:\\Mine\\Mine\\Icons\\1355312509_gadu.ico D:\\Mine\\Mine\\1355312509_gadu.ico’ exec…

SQL exec для процедуры xp_cmdshell

Я решаюсь на инъекцию SQL за последние несколько дней. Я могу использовать уязвимость инъекции SQL для обхода входа в систему и пинга обратно на мою атакующую машину из той же точки инъекции,…

Разрешения на выполнение для » NT Authority\Authenticated пользователей»

Можно ли предоставить разрешения на выполнение NT Authority\Authenticated Users для конкретной хранимой процедуры? Нам нужны все торговые партнеры, чтобы иметь доступ к набору результатов. Мы уже…

Включить xp_cmdshell не работает

Я пытаюсь включить xp_cmdshell в SQL сервере. Поэтому я побежал: EXEC master.dbo.sp_configure ‘show advanced options’, 1 RECONFIGURE EXEC master.dbo.sp_configure ‘xp_cmdshell’, 1 RECONFIGURE В…

Выполните команду xp_cmdshell от имени конкретного пользователя

Я хотел бы запустить xp_cmdshell (TSQL процедура)для того, чтобы mount сетевой диск, а затем получить доступ к удаленным mdb-файлам. Я являюсь администратором на сервере MS SQL, и я разрешил…

chmod: как рекурсивно добавлять разрешения на выполнение только к файлам, которые уже имеют разрешение на выполнение

Я заметил это: chmod -R a+x добавляет разрешения на выполнение для всех файлов, а не только для тех, которые в данный момент являются исполняемыми. Есть ли способ добавить разрешения на выполнение…

получение разрешения на выполнение скрипта bash

im пытается заставить мой сервер выполнить простой скрипт bash: #!/bin/bash echo Hello World После сохранения этого в /var/www/script (я сохраняю его в веб-каталоге без особой причины) я пытаюсь…

Как вызвать исключение из команды, выполняемой xp_cmdshell?

Следующий код использует xp_cmdshell для выполнения bcp.exe. Однако он продолжает выполнять следующий код, даже если команда/исполняемый файл не удалось. Как вызвать исключение, если выполнение (мой…

XP_CMDShell не извлекает переменные среды в Windows в SQL сервере — sql-server

Я создал новую переменную окружения VerName в своей системе. Попытался выполнить пакетный файл через SQL сервер. В файле журнала ничего не отображалось. В рамках отладки я пересмотрел логику и просто написал следующую команду, чтобы проверить, поступает ли значение из запроса

EXEC master..xp_cmdshell '%VerName%'

Это было отображение ниже ошибки

‘%VerName%’ не распознается как внутренняя или внешняя команда,
работоспособная программа или пакетный файл. NULL

Я делаю что-то не так?

sql-server

batch-file

sql-server-2008-r2

Поделиться

Источник


Krish    

06 августа 2018 в 07:49

1 Ответ



2

Переменные среды не будут отображаться сразу после их создания. Я предполагаю, что вы создали переменные окружения и должны немедленно получить к ним доступ. Это не будет работать таким образом. Перезапустите сервер SQL или службу сервера SQL. Этот вопрос будет решен.
Также обратите внимание, что написанный вами отладочный запрос также не будет работать. Пожалуйста, используйте следующий запрос для правильной отладки

EXEC master..xp_cmdshell 'ECHO %VerName%'

Поделиться


Gopakumar N.Kurup    

06 августа 2018 в 07:52


Похожие вопросы:

SQL exec для процедуры xp_cmdshell

Я решаюсь на инъекцию SQL за последние несколько дней. Я могу использовать уязвимость инъекции SQL для обхода входа в систему и пинга обратно на мою атакующую машину из той же точки инъекции,…

xp_cmdshell на сервере SQL Linux публичный просмотр

Я использую публичный предварительный просмотр SQL Server 2016 на Linux. Я пытаюсь запустить xp_cmdshell и получить следующую ошибку. Я подозреваю, что это связано с разрешениями, но понятия не…

Включить xp_cmdshell не работает

Я пытаюсь включить xp_cmdshell в SQL сервере. Поэтому я побежал: EXEC master.dbo.sp_configure ‘show advanced options’, 1 RECONFIGURE EXEC master.dbo.sp_configure ‘xp_cmdshell’, 1 RECONFIGURE В…

SSIS переменная среды конфигурации пакета не была найдена при вызове ее с помощью xp_cmdshell?

У меня есть пакет SSIS, который загружает данные из плоского файла в таблицу сервера SQL. Для настройки я использую метод конфигурации пакета с использованием переменных среды, где мы можем хранить…

альтернативные процедуры xp_cmdshell в sql azure

какова альтернатива XP_CMDshell ? он отлично работает на сервере sql но это не поддержка в sql azure так что же такое альтернатива для sql azure ?

Использование xp_cmdshell в SQL сервере

Я пытаюсь выполнить сценарий perl из xp_cmdshell . Вывод скрипта perl — это файл csv, но когда я выполняю EXEC master..xp_cmdshell N’perl G:\script\perl.pl’; Я не могу найти созданный файл csv, хотя…

Почему xp_cmdshell не работает в SQL Server 2012?

Возможный Дубликат : Включите процедуры xp_cmdshell’ сервер SQL Когда я запускаю команду xp_cmdshell в SQL Server 2012, я получаю следующее сообщение: SQL сервер заблокировал доступ к процедуре ‘…

SQL сервере процедуры xp_cmdshell

Есть ли у них другой способ получить список имен файлов через T-SQL, кроме ВСТАВИТЬ В @backups(filename) EXEC master.sys.xp_cmdshell ‘DIR /b c:\some папка с sql резервными копиями в ней Я пытаюсь…

SQL Server 2005 xp_cmdshell

Следующий код отлично работает при выполнении непосредственно на сервере Sql: DECLARE @cmd sysname set @cmd = ‘dir C:\A_Projects’ EXEC master..xp_cmdshell @cmd но когда я пытаюсь создать хранимую…

какова цель и сценарии реального времени xp_cmdshell в sql сервере?

Я хотел бы знать основную цель xp_cmdshell в sql. В настоящее время в моем проекте мы используем эту команду для выполнения пакета SSIS из хранимой процедуры. Поэтому мне нужно узнать больше о…

Как включить XP_CMDSHELL и отключить XP_CMDSHELL с помощью SP_CONFIGURE в SQL Server

Введение

В этом совете мы рассмотрим шаг, который необходимо выполнить для Включить XP_CMDSHELL и как Отключить XP_CMDSHELL с помощью системной хранимой процедуры SP_CONFIGURE . Чтобы использовать XP_CMDSHELL, вам необходимо быть системным администратором. Прочтите следующую статью, в которой объясняется, как разрешить пользователям без прав администратора использовать XP_CMDSHELL.

Получено сообщение об ошибке, когда XP_CMDSHELL отключен

При отключении XP_CMDSHELL вы получите указанное ниже сообщение об ошибке.

  Msg 15281, уровень 16, состояние 1, процедура xp_cmdshell, строка 1 SQL Server заблокировал доступ к процедуре sys.xp_cmdshell компонента xp_cmdshell, поскольку этот компонент отключен как часть конфигурации безопасности для этого сервера. Системный администратор может включить использование xp_cmdshell с помощью процедуры sp_configure.Дополнительные сведения о включении 'xp_cmdshell' см. В разделе «Конфигурация контактной зоны» в электронной документации по SQL Server.  

Как включить XP_CMDSHELL с помощью SP_CONFIGURE?

Шаги для включения XP_CMDSHELL в SQL Server: —

Администратор базы данных может включить XP_CMDSHELL с помощью системной хранимой процедуры SP_CONFIGURE. Чтобы включить XP_CMDSHELL, выполните указанный ниже сценарий.

  Использовать Мастер
ИДТИ

EXEC master.dbo.sp_configure 'показать дополнительные параметры', 1
ПЕРЕКОНФИГУРАЦИЯ С ПЕРЕОПРЕДЕЛЕНИЕМ
ИДТИ

Мастер EXEC.dbo.sp_configure 'xp_cmdshell', 1
ПЕРЕКОНФИГУРАЦИЯ С ПЕРЕОПРЕДЕЛЕНИЕМ
GO  

Вывод запроса

  Параметр конфигурации «Показать дополнительные параметры» изменен с 0 на 1. Для установки запустите оператор RECONFIGURE. Параметр конфигурации «xp_cmdshell» изменен с 0 на 1. Запустите оператор RECONFIGURE для установки.  
Статьи по теме и советы

Как отключить XP_CMDSHELL с помощью SP_CONFIGURE?

Шаги по отключению XP_CMDSHELL в SQL Server: —

Всегда рекомендуется отключать XP_CMDSHELL , когда он не используется.Администратор базы данных может отключить XP_CMDSHELL с помощью системной хранимой процедуры SP_CONFIGURE. Чтобы отключить XP_CMDSHELL, выполните указанный ниже скрипт.

  Использовать Мастер
ИДТИ

EXEC master.dbo.sp_configure 'xp_cmdshell', 0
ПЕРЕКОНФИГУРАЦИЯ С ПЕРЕОПРЕДЕЛЕНИЕМ
ИДТИ

EXEC master.dbo.sp_configure 'показать дополнительные параметры', 0
ПЕРЕКОНФИГУРАЦИЯ С ПЕРЕОПРЕДЕЛЕНИЕМ
GO  

Вывод запроса

  Параметр конфигурации «xp_cmdshell» изменен с 1 на 0. Для установки запустите оператор RECONFIGURE.Параметр конфигурации "показать дополнительные параметры" изменен с 1 на 0. Для установки запустите оператор RECONFIGURE.  

Заключение

Рекомендуется всегда отключать доступ XP_CMDSHELL, и его следует включать или отключать с помощью системной хранимой процедуры SP_CONFIGURE.

.

Как использовать расширенную процедуру xp_cmdshell

Введение

Xp_cmdshell — очень мощная расширенная процедура, используемая для запуска командной строки (cmd). Это очень полезно для выполнения задач в оперативной системе, таких как копирование файлов, создание папок, совместное использование папок и т. Д. С помощью T-SQL.

В этой новой статье мы покажем несколько полезных примеров того, как его использовать.

Мы покажем, как выполнять следующие задачи:

  • Как включить xp_cmdshell
  • Как копировать резервные копии из одной папки в другую с помощью xp_cmdshell
  • Как сохранить полный путь к файлам папки в таблице SQL Server
  • Как выполнить PowerShell в T-SQL с помощью xp_cmdshell
  • Как подключиться к Azure в SSMS с помощью xp_cmdshell и sqlcmd

Требования

  1. SQL Server установлен.В этом примере мы используем SQL Server 2016, но вы можете работать с SQL Server 2005.

Начало работы

Как включить xp_cmdshell

Сначала мы включим xp_cmdshell. Нам нужно будет проверить, включены ли расширенные параметры в SQL Server. Для этого запустите следующую процедуру в SQL Server Management Studio (SSMS):

Мастер USE;

GO

EXEC sp_configure ‘показать расширенный параметр’

Если при запуске команды значение конфигурации равно 0, это означает, что дополнительные параметры не включены.

Рисунок 1. Дополнительные параметры в SQL Server

Чтобы включить дополнительные параметры, установите для расширенного параметра значение 1. В следующем примере показано, как это сделать:

Мастер USE;

GO

EXEC sp_configure ‘показать расширенный параметр’, ‘1’;

ПЕРЕКОНФИГУРАЦИЯ С ПЕРЕЗАГРУЗКОЙ;

Xp_cmdshell — один из дополнительных параметров, теперь вы можете включить эту расширенную процедуру.В следующем примере показано, как его включить:

EXEC sp_configure ‘xp_cmdshell’, 1;

GO

ПЕРЕКОНФИГУРАЦИЯ;

Как копировать резервные копии из одной папки в другую с помощью xp_cmdshell

В следующем примере показано, как скопировать несколько резервных копий из одной папки в другую. У нас есть несколько резервных копий по пути c: \ backup:

Рисунок 2.Резервные копии SQL

Следующие операторы T-SQL скопируют файлы из c: \ Backup в c: \ Shared папку:

xp_cmdshell ‘копировать c: \ backup c: \ shared’;

Результат будет таким:

Рисунок 3. Копирование файлов вывода

Как видите, команда copy cmd копирует файлы в общую папку:

Рисунок 4.Резервные копии в папке назначения

Как сохранить полный путь к файлам в папке в таблице SQL Server

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

Например, у меня в папке c: \ image есть следующие изображения:

Рисунок 5. Изображения в папке

Я хочу сохранить в таблице полные пути, например:

C: \ images \ 1.jpg
C: \ images \ 2.jpg
…так далее.

Сначала мы сохраним все пути к папке в текстовом файле с именем path:

xp_cmdshell ‘dir «c: \ images» /s/b>c:\sql\path.txt’;

Теперь path.txt будет включать все полные пути к изображениям:

Рисунок 6. Сохраненные полные пути

Нам нужна таблица для хранения путей:

создать образы таблиц (путь varchar (80))

Чтобы импортировать информацию из txt-файла с рисунка 6 в только что созданную таблицу, используйте следующие предложения:

xp_cmdshell ‘bcp AdventureWorKs2016CTP3.dbo.images IN c: \ sql \ path.txt -c -T ‘

Bcp — это команда, используемая для импорта из path.txt в таблицу dbo.images в базе данных AdventureWorks2016CTP3. –T используется для подключения с использованием доверенного соединения (текущая проверка подлинности Windows), а –c означает выполнение операций символьного типа.

Если вы сделаете выбор в таблице изображений, вы можете убедиться, что мы можем успешно импортировать данные в SQL Server, выполнив выбор:

Оператор SQL покажет следующие результаты:

Рисунок 7.Данные, импортированные из txt в sql с использованием xp_cmdshell и bcp

Мы собираемся создать таблицу с идентификатором и столбец с столбцами пути и имени изображения:

CREATE TABLE [dbo]. [Pictures] (

[id] [smallint] IDENTITY (1,1) NOT NULL,

[path] [varchar] (max) NULL,

[imagename] [ nchar] (40) NULL,

ОГРАНИЧЕНИЕ [PK_pictures] ПЕРВИЧНЫЙ КЛЮЧ КЛАСТЕРИРОВАН

(

[id] ASC

) С (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KS_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

Последние шаги — это импорт данных из изображений таблиц в изображения таблиц:

вставить в картинки (имя изображения, путь)
выберите replace (path, ’c: \ images \’, ”) как имя изображения, путь
из изображений

ре>

Теперь у вас будет путь и имя изображения в таблице:

выберите * из картинок
е>

Рисунок 8.Данные таблицы импортированы

Как выполнить PowerShell в T-SQL с помощью xp_cmdshell

PowerShell используется для создания сценариев и автоматизации задач в SQL Server, SharePoint, Window Server, Azure и некоторых других технологиях Microsoft. PowerShell теперь доступен и в Linux. Вы можете использовать циклы и операторы для создания мощных скриптов для автоматизации задач с помощью PowerShell.

Например, эти командлеты позволяют копировать резервные копии из c: \ sql \ source в папку назначения в PowerShell:

copy-item «C: \ sql \ source» -Destination «C: \ sql \ destination» -Recurse

Папка назначения теперь будет иметь исходную папку с резервными копиями:

Рисунок 9.Резервные копии в папке назначения

Чтобы запустить тот же командлет PowerShell с помощью xp_cmdshell в SSMS, выполните следующие инструкции T-SQL:

xp_cmdshell «powershell -command» copy-item «C: \ sql \ source» -Destination «C: \ sql \ destination» -Recurse ’

Вы вызываете PowerShell и выполняете команду для копирования всех файлов и папок из источника в место назначения.

В следующем примере выполняется сценарий PowerShell с использованием xp_cmdshell.Сначала мы создадим сценарий с именем script.ps1 со следующим содержимым:

Имя файла: script.ps1
copy-item «C: \ sql \ source» -Destination «C: \ sql \ destination» –Recurse

Чтобы вызвать сценарий PowerShell в xp_cmdshell, используйте следующие предложения:

xp_cmdshell ‘powershell -command“ C: \\ sql \\ script.ps1 ″ ‘‘ ‘
xp_cmdshell and SQL Server PowerShell

Иногда нам нужно подключиться к SQL PowerShell (SQLPS).В следующем примере показано, как отображать информацию о базе данных в файле HTML с помощью xp_cmdshell. В следующем примере показано, как это сделать.

Сначала создайте сценарий с именем scriptsql.ps1 со следующим содержимым:

sqlserver:
cd sql \ InstanceName \ default \ databases
get-childitem | ConvertTo-HTML | Исходный файл C: \ sql \ databases.htm

Сценарий обращается к SQL Server и к имени экземпляра (измените имя вашего экземпляра SQL Server), по умолчанию и к базам данных.

Get-childitem покажет все базы данных, а файл convert-html преобразует результаты в формат HTML. Результат будет сохранен в файле с именем databases.htm:

Рис. 10. Файл HTML

Как подключиться к Azure в SSMS с помощью xp_cmdshell и sqlcmd

Иногда нам нужно вызвать Azure из локальной базы данных. Обычно для подключения к Azure требуется другое подключение. Xp_cmdshell и sqlcmd — альтернатива для создания сложных хранимых процедур и скриптов, подключающихся к Azure и локальным базам данных.

Сначала мы создадим SQL Server на портале Azure. На портале Azure перейдите в раздел Дополнительные службы> Серверы SQL:

Рис. 11. Портал Azure, серверы SQL

Нажмите Добавить, чтобы добавить новый SQL Server:

Рисунок 12. Добавление нового SQL Server

Добавьте новый, логин и пароль, создайте новую группу ресурсов, выберите место и нажмите Create:

Рисунок 13.Информация о сервере SQL

После создания подождите несколько минут и обновите список серверов SQL. В этом примере имя SQL Server — sqlshack:

Рисунок 14. Обновление серверов

Чтобы включить на локальном компьютере SSMS, на портале Azure щелкните SQL Server, перейдите в раздел «Брандмауэр» и нажмите «Добавить IP-адрес клиента». Это добавит локальный компьютер с SSMS. После добавления нажмите Сохранить:

Рисунок 15.Включение доступа к Azure по IP

Выберите SQL Server, созданный на портале Azure, и выберите свойства. Отобразится имя Azure SQL Server:

Рисунок 16. Имя сервера Azure SQL

На локальном сервере SQL создайте сценарий sql с именем sqlscript.sql со следующим содержимым:

СОЗДАТЬ БАЗУ ДАННЫХ SQLSHACKDB

Создать базу данных будет использоваться для создания базы данных с именем SQLSHACKDB в Azure.

Следующие предложения T-SQL будут использоваться для запуска сценария в Azure для создания базы данных Azure:

xp_cmdshell ‘sqlcmd -U daniel -S sqlshack.database.windows.net -P «myPWD» -d master -i «c: \ sql \ sqlscript.sql»‘

Где daniel и myPWD — логин и пароль, созданные на рисунке 13. Sqlshack.database.windows.net — это имя сервера, показанное на рисунке 16. Мы вызываем sqlcmd, который является командной строкой. Мы подключаемся к базе данных master в Azure и получаем в качестве входных данных сценарий sqlscript.sql.

Если все в порядке, на портале Azure в базах данных SQL вы сможете увидеть созданную базу данных SQLSHACKDB:

Рисунок 17. База данных Azure, созданная с помощью xp_cmdshell.

Заключение

В этой статье мы объяснили, как копировать данные из одной папки в другую, как скопировать полный путь к файлам в таблицу SQL.Мы также узнали, как запустить PowerShell и как подключиться к Azure с помощью xp_cmdshell.

Даниэль Кальбимонте — самый ценный специалист Microsoft, сертифицированный инструктор Microsoft и сертифицированный ИТ-специалист Microsoft по SQL Server. Он является опытным автором SSIS, преподавателем ИТ-академий и имеет более 13 лет опыта работы с различными базами данных.

Он работал в правительстве, нефтяных компаниях, на веб-сайтах, в журналах и университетах по всему миру.Даниэль также регулярно выступает на конференциях и в блогах по SQL Server. Он пишет учебные материалы по SQL Server для сертификационных экзаменов.

Он также помогает с переводом статей по SQLShack на испанский

Просмотреть все сообщения Даниэля Кальбимонте

Последние сообщения Даниэля Кальбимонте (посмотреть все)

.Сервер

sql — получение разрешения на выполнение для xp_cmdshell

Переполнение стека

  1. Около
  2. Продукты

  3. Для команд
  1. Переполнение стека
    Общественные вопросы и ответы

  2. Переполнение стека для команд
    Где разработчики и технологи делятся частными знаниями с коллегами

  3. Вакансии
    Программирование и связанные с ним технические возможности карьерного роста

  4. Талант
    Нанимайте технических специалистов и создавайте свой бренд работодателя

  5. Реклама
    Обратитесь к разработчикам и технологам со всего мира

  6. О компании

Загрузка…

.

Включение и работа с XP_CmdShell

Xp_CmdShell позволяет нам запускать команды cmd в среде T-SQL. Процесс Windows, созданный xp_cmdshell, имеет те же права безопасности, что и учетная запись службы SQL Server. Для использования Xp_CmdShell требуются права SysAdmin. Когда он вызывается пользователем, который не является членом фиксированной серверной роли sysadmin, xp_cmdshell подключается к Windows с помощью учетной записи прокси. В качестве меры безопасности по умолчанию Xp_CmdShell отключен, и мы должны явно включить его перед использованием.Если отключено, то при попытке использовать

будет использоваться следующее сообщение об ошибке.

SQL Server заблокировал доступ к процедуре «sys.xp_cmdshell» компонента «xp_cmdshell», поскольку этот компонент отключен как часть конфигурации безопасности для этого сервера. Системный администратор может включить использование «xp_cmdshell» с помощью процедуры sp_configure. Дополнительную информацию о включении «xp_cmdshell» см. В разделе «Конфигурация контактной зоны» в электронной документации по SQL Server.

Включить Xp_CmdShell

Мы можем включить Xp_CmdShell через графический интерфейс SSMS или T-SQL.Итак, давайте рассмотрим оба способа включения Xp_CmdShell.
Чтобы включить Xp_CmdShell через графический интерфейс SSMS , выполните следующие действия.

  • Щелкните правой кнопкой мыши экземпляр сервера
  • Нажмите на грани
  • Выберите Surface Area Configuration из раскрывающегося списка фасетов
  • Найдите Xp_cmdShell в свойствах и установите для параметра enabled значение true
  • Нажмите OK, и Xp_CmdShell теперь включен

Следующие снимки помогут вам выполнить вышеупомянутые шаги для включения Xp_CmdShell через графический интерфейс SSMS.

Чтобы включить Xp_CmdShell через T-SQL

— Чтобы разрешить изменение дополнительных параметров.
EXEC sp_configure ‘показать дополнительные параметры’, 1
ИДТИ

— Чтобы обновить текущее настроенное значение для дополнительных опций.
ПЕРЕКОНФИГУРИРОВАТЬ
ИДТИ

— Чтобы включить функцию.
EXEC sp_configure ‘xp_cmdshell’, 1
ИДТИ

— Чтобы обновить текущее настроенное значение для этой функции.
ПЕРЕКОНФИГУРИРОВАТЬ
GO

— Чтобы разрешить изменение дополнительных параметров.

EXEC sp_configure «показать дополнительные параметры», 1

GO

— для обновления текущего настроенного значения для дополнительных параметров.

RECONFIGURE

GO

— для включения функции.

EXEC sp_configure ‘xp_cmdshell’, 1

GO

— для обновления текущего настроенного значения для этой функции.

ПЕРЕКОНФИГУРАЦИЯ

GO

проверить текущий вариант

Чтобы проверить текущий статус xp_cmdshell, вы можете использовать следующий T-SQL

— Проверить текущий статус xp_cmdshell
ВЫБРАТЬ * ИЗ sys.конфигурации, где name = ‘xp_cmdshell’
GO

— Проверить текущий статус xp_cmdshell

SELECT * FROM sys.configurations, где name = ‘xp_cmdshell’

GO

Использование Xp_CmdShell

Здесь я процитирую простой пример использования xp_cmdshell из BOL.
Выполнение следующего оператора xp_cmdshell возвращает список каталогов текущего каталога.

EXEC xp_cmdshell ‘dir * .exe’;
GO

.

Добавить комментарий

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

2021 © Все права защищены. Карта сайта