gpt4 book ai didi

c# - 尝试通过来自数据库触发器的 Web 请求执行 "EXECUTE Master.dbo.xp_CmdShell"命令以在本地创建文本文件时发生错误

转载 作者:太空宇宙 更新时间:2023-11-03 12:06:41 25 4
gpt4 key购买 nike

要求:我想使用 cmdshell 命令(在标题中提到)从 SQL-Server 数据库触发器创建文本文件。

场景:

S1:当我尝试从触发器执行 cmdshell 命令(在标题中提到)以创建文本文件并在其中写入一些内容时,它将正确执行并创建文件。

S2:当我尝试通过 IIS 从 Windows Server 2016 WebAPI 服务调用和执行相同的场景 S1 时,我们在事件查看器中收到以下错误。

Event Viewer error.

最佳答案

xp_CmdShell 需要 windows account映射成功执行。如果您使用具有 sysadmin 角色的用户登录(我猜这是您的第一个场景),则使用的帐户将是 SQL Server 服务帐户。

如果用户不是 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

您还需要在 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:在您的 SQL Server 上启用 xp_cmdshell 时要非常小心,因为它可能会打开安全漏洞,特别是在授予不受控制的登录权限时。即使您将特定调用封装在 SP 中,也有用户可以绕过并直接执行 xp_cmdshell 的变通方法。执行此操作的正确方法是通过自定义登录进行证书签名。

关于c# - 尝试通过来自数据库触发器的 Web 请求执行 "EXECUTE Master.dbo.xp_CmdShell"命令以在本地创建文本文件时发生错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54513436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com