Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 尝试“删除”时出错;执行Master.dbo.xp“U CmdShell”;命令通过web请求从数据库触发本地创建文本文件_C#_Sql Server_Asp.net Web Api_Database Trigger_Xp Cmdshell - Fatal编程技术网

C# 尝试“删除”时出错;执行Master.dbo.xp“U CmdShell”;命令通过web请求从数据库触发本地创建文本文件

C# 尝试“删除”时出错;执行Master.dbo.xp“U CmdShell”;命令通过web请求从数据库触发本地创建文本文件,c#,sql-server,asp.net-web-api,database-trigger,xp-cmdshell,C#,Sql Server,Asp.net Web Api,Database Trigger,Xp Cmdshell,要求:我想使用cmdshell命令(在标题中提到)从SQL Server DB触发器创建文本文件 场景: S1: 当我试图从触发器执行cmdshell命令(在标题中提到)以创建文本文件并在其中写入一些内容时,它将正确执行并创建文件 S2: 当我试图通过IIS从windows Server 2016 WebAPI服务调用并执行同一场景时,事件查看器中出现以下错误 xp\u CmdShell需要一个映射才能成功执行。如果您是使用具有sysadmin角色的用户登录的(我猜这是您的第一个场景),则使用的

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

场景

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

S2: 当我试图通过IIS从windows Server 2016 WebAPI服务调用并执行同一场景时,事件查看器中出现以下错误


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

如果用户不是
sysadmin
(这应该是IIS用户),那么它将模拟配置的帐户,以获得一个名为
##xp#cmdshell_proxy#u account#
的特殊凭据,您需要对其进行配置

要设置此帐户,请使用SP,例如:

EXEC sp_xp_cmdshell_proxy_account 'DOMAIN\SQLServerCMDProxy','sdfh%dkc93vcMt0';
您可以通过以下方式检查此映射:

select * from sys.credentials

如果您尚未执行以下操作,则还需要在
xp\u cmdshell
过程上授予execute命令:

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\u cmdshell
时要非常小心,因为它可能会打开安全漏洞,特别是在授予不受控制的登录权限时。即使将特定调用封装在SP中,用户也可以绕过并直接执行
xp\u cmdshell
。正确的方法是使用自定义登录名进行证书签名。

不确定此日志是否依赖于此,但默认情况下xp\u cmdshell处于禁用状态。您是否在发生故障的服务器上启用了它?