执行xp_cmdshell时发生错误。。。。。。。。。。

mmcgzs 2005-10-12 12:22:50
下面的代码是把已经备份的数据库复制到局域网的机器上。

declare @cmdstr1 varchar(8000)
declare @cmdstr2 varchar(8000)
declare @path varchar(8000)
select @cmdstr1=itemvalue from config where item='backupcmd'
select @path=itemvalue from config where item='datapath'
set @cmdstr1='net use z: '+@cmdstr1
set @cmdstr2='copy '+@path+'\'+CONVERT(varchar(10), GETDATE(), 102)+' z:\'
exec master..xp_cmdshell @cmdstr1
exec master..xp_cmdshell @cmdstr2
exec master..xp_cmdshell 'net use z: /delete'

执行是出现错误:

xpsql.cpp: 错误 5 来自 CreateProcess(第 675 行) [SQLSTATE 01000]

我有试着执行
exec master..xp_cmdshell 'dir'
也是一样的错误

高手来解决一下谢了。

有其他方法实现以上功能也可以
...全文
356 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
一怒倾城 2005-10-18
  • 打赏
  • 举报
回复
这样试试:

use master
go

xp_sqlagent_proxy_account N'SET'
, N'<mydomain>'
, N'<ntuser>'
, N'<ntuser password>'

go

-- retrieve the proxy account to check that it's correct.
xp_sqlagent_proxy_account N'GET'
go

-- grant database access in master
sp_grantdbaccess '数据库用户'
go

grant exec on xp_cmdshell to 数据库用户
go

good luck!
lzheng2001 2005-10-12
  • 打赏
  • 举报
回复
错误 5 来自 CreateProcess(第 675 行)
==========
第 675 行的内容是什么?
---涛声依旧--- 2005-10-12
  • 打赏
  • 举报
回复
xp_cmdshell 會同步運作。要等到命令的 shell 命令完成之後,才會交回控制權。

授權讓使用者執行時,只要執行 Microsoft SQL Server™ 的帳戶有執行權限,使用者就可以在 Microsoft Windows NT® 命令 shell 執行任何作業系統的命令。

根據預設值,只有 sysadmin 固定伺服器角色的成員才能執行這個延伸預存程序。不過,您可以授權讓其他使用者執行這個預存的程序。

當 sysadmin 固定伺服器角色成員使用者叫用 xp_cmdshell,xp_cmdshell 將在 SQL Server 服務執行下的安全內容下執行。當使用者不是 sysadmin 群組成員時,xp_cmdshell 會模擬「SQL Server 代理程式」Proxy 帳戶,此帳戶是用 xp_sqlagent_proxy_account 命令進行指定。假如沒有 Proxy 帳戶,xp_cmdshell 命令將會失敗。這種狀況只有在 Microsoft® Windows NT® 4.0 和 indows 2000 作業系統才會發生。在 Windows 9.x 之下,沒有這樣的模擬,同時,xp_cmdshell 會在啟動 SQL Server 的 Windows 9.x 使用者的安全內容下執行。

附註 在先前的版本中,被授予執行 xp_cmdshell 的使用者要在 MSSQLServer 服務的使用者帳戶執行。可將 SQL Server 設定 (透過設定選項) 成讓沒有 SQL Server sa 存取權的使用者能夠在 SQLExecutiveCmdExec Windows NT 帳戶中執行 xp_cmdshell。在 SQL Server 7.0 中,此帳戶叫做 SQLAgentCmdExec。不是 sysadmin 固定伺服器角色成員的使用者現在可以在此帳戶中執行命令,而不必指定設定變更。


權限
xp_cmdshell 的執行權限預設為 sysadmin 固定伺服器角色的成員,但是可授予其他使用者。


重要事項 如果您選擇使用的 Windows NT 帳戶不是 MSSQLServer 服務的本機管理員群組的成員,不是 sysadmin 固定伺服器角色成員的使用者就不能執行 xp_cmdshell。

zjcxc 元老 2005-10-12
  • 打赏
  • 举报
回复
检查这句中, 映射使用的用户权限的设置是否正确
set @cmdstr1='net use z: '+@cmdstr1
wgsasd311 2005-10-12
  • 打赏
  • 举报
回复
可能是没有权限
lzheng2001 2005-10-12
  • 打赏
  • 举报
回复
试试用sa登录
vivianfdlpw 2005-10-12
  • 打赏
  • 举报
回复
不要用LocalSystem启动SQL Server,用管理员帐户
fornothing 2005-10-12
  • 打赏
  • 举报
回复
权限问题 你的sql server的运行权限 没有到达 system
你在服务运行权限 里面看
mmcgzs 2005-10-12
  • 打赏
  • 举报
回复
我查看了一下角色,我的那个用户是sysadmin角色,但是就是不能执行sp_cmdshell

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧