作为概念证明,我们尝试将xp_cmdshell
命令插入现有解决方案。目前,一个应用程序在我们的数据库服务器上调用一个存储过程,在分析时看起来像:
declare @P1 int
set @P1=1
exec Name_Of_The_SP @param1 = 3, @param2 = 'blah', @parametc = 'blahetc', @ID = P1 output
select @P1
SP 本质上是打开一个事务,插入一行,然后提交。在这里面我们添加了:
exec master..xp_cmdshell 'dir > c:\test.txt'
然后,当我们在 SSMS 查询窗口中运行第一个代码块时,文件会按预期在服务器上生成。但是当我们使用应用程序调用它时,行会正常插入,但文件没有生成?
SQL Server 和 SQLAgent 用户是本地管理员和系统管理员,因此在那里看不到任何问题。尝试使应用程序用户也成为本地管理员,但无济于事,它已经是系统管理员。
这是 SQL Server 2000