执行xp_cmdshell相当于拥有服务器windows的操作权限(执行任何DOS命令),不建议开放喔,
可以把需要用到的功能封装为存储过程或CLR实现,然后授权给对应的用户即可.

解决方案 »

  1.   


    知道这个问题,所以不能给用户sa的权限,用户就是public角色成员,但个别的地方需用到复制文件,需要xp_cmdshell,
    才用代理账号的方式处理,不想直接给用户加到sysadmin中.
      

  2.   

    可以把需要用到的功能封装为存储过程,然后授权给对应的用户即可. 
    这样仅仅将指定的DOS命令(如copy)授权给用户使用比较安全.
    比起让用户直接调用xp_cmdshell执行任何DOS命令安全喔.
    例如,-- 复制文件
    create proc dbo.sp_CopyFile
    (@SourceFile varchar(100),   -- 源文件
     @TargetFile varchar(100)    -- 目标文件
    )
    as
    begin
     set nocount on
     
     exec xp_cmdshell 'copy '+@SourceFile+' '+@TargetFile+' /Y'
    end
      

  3.   


    放在存储过程中,用户一样也是要运行xp_cmdshell, 又回到那个用户账号的权限问题,如将用户账号加入sysadmin,就没有问题,
    但sysadmin权限过大,目前用户是public角色,不能运行xp_cmdshell,sql帮助有提到可以用代理账号的方式,允许非sysadmin成员运行xp_cmdshell,现在就是配置了代理账号运行出错. 但查询配置信息又是成功的.
    配置方式参考:http://support.microsoft.com/kb/890775
      

  4.   

    你当前的用户,要有 sysadmin 的角色,不然没有权限执行这个存储过程的。