使用xp_cmdshell移动文件时访问被拒绝

问题描述 投票:2回答:2

我正在尝试使用某些T-SQL将某些文件从一个目录移动到另一个目录。我正在使用xp_cmdshell调用move命令就像这样:

create table #output(line varchar(2000) null)
insert into #output exec master..xp_cmdshell 'move /y "D:\files\*.txt" "D:\oldfiles"'

但是文件inst move和#output表包含move命令的输出

Access is denied.
Access is denied.
Access is denied.
Access is denied.
Access is denied.
Access is denied.
        0 file(s) moved.
NULL

SQL Server代理帐户已映射到本地管理员如果我在输入命令时打开命令提示符,则进入移动命令

move /y "D:\files\*.txt" "D:\oldfiles"

文件完美移动

这全部发生在w2k3服务器上运行的sql2005上。

我以本地管理员身份登录到服务器

sql sql-server-2005 tsql command-line windows-server-2003
2个回答
11
投票

您可以运行一个

exec master..xp_cmdshell 'set username'

并告诉它返回什么?

EDIT:通过OP的注释,命令以NETWORK SERVICE的身份运行。在相关目录中允许NETWORK SERVICE解决了该问题。


0
投票

如上所述,它错过了许可。另一个简单的方法是,如果可能的话,只需通过xp_cmdshell创建文件夹。如果它是根目录,则无法应用。

exec xp_cmdshell 'mkdir d:\files'
exec xp_cmdshell 'mkdir d:\oldfiles'

确保文件夹具有适当的权限。

© www.soinside.com 2019 - 2024. All rights reserved.