Ошибка возникает при попытке выполнить команды «EXECUTE Master.dbo.xp_CmdShell» через веб-запрос от триггера базы данных для локального создания текстового файла. - PullRequest
0 голосов
/ 04 февраля 2019

Требование : я хочу создать текстовый файл из триггера БД SQL-Server, используя команды cmdshell (упомянутые в заголовке).

Сценарии :

S1 : Когда я пытаюсь выполнить команду cmdshell (упоминается в заголовке) из триггера, чтобы создать текстовый файл и написать несколькосодержимое в нем будет выполняться правильно, и файл будет создан.

S2 : при попытке вызвать и выполнить тот же сценарий S1 из windows Server 2016Служба WebAPI через IIS, мы получаем следующую ошибку в Event Viewer.

Event Viewer error.

1 Ответ

0 голосов
/ 04 февраля 2019

xp_CmdShell требуется сопоставление windows для успешного выполнения.Если вы вошли в систему с пользователем с ролью sysadmin (я полагаю, это ваш первый сценарий), будет использоваться учетная запись для учетной записи службы SQL Server.

Если пользователь не't sysadmin (это должен быть пользователь IIS), тогда он будет выдавать себя за настроенную учетную запись для специальных учетных данных с именем ##xp_cmdshell_proxy_account##, которые необходимо настроить.

Чтобы настроить эту учетную запись, используйтеSP sp_xp_cmdshell_proxy_account , например:

EXEC sp_xp_cmdshell_proxy_account 'DOMAIN\SQLServerCMDProxy','sdfh%dkc93vcMt0';

Это сопоставление можно проверить с помощью:

select * from sys.credentials

enter image description here

Вам также потребуется предоставить команду execute для процедуры xp_cmdshell, если вы еще этого не сделали:

GRANT EXEC ON xp_cmdshell TO 'IISUser'

И вы можете проверить, работает ли она правильно, выдав себя за имя пользователя с достаточным количеством привилегий.:

EXECUTE AS LOGIN = 'IISUser' -- Shift priviledges to this login for the current session

EXEC xp_cmdshell 'dir *.exe'; -- Try to execute the xp_cmdshell

REVERT -- Revert to the previous login

PD: Будьте очень осторожны при разрешении использования xp_cmdshell на вашем SQL Server, так как это может открыть дыры в безопасности, особенно при предоставлении разрешений для неконтролируемых входов в систему.,Даже если вы инкапсулируете определенный вызов в SP, есть обходные пути, которые пользователь может сделать, чтобы обойти и выполнить xp_cmdshell напрямую.Правильный способ сделать это - подписать сертификат с помощью пользовательского логина.

...