none
关于XP_CMDShell执行权限 RRS feed

  • 问题

  • 环境:SQL Svr 2k8 x64 on Win Svr 2k3 x64,非域环境
    SQL SERVER服务帐号:SQL,密码123

    执行
    Exec XP_CMDShell 'Copy D:\A.txt \\Svr1\Share\'
    Exec XP_CMDShell 'Copy D:\A.txt \\Svr2\Share\'

    Svr1 and Svr2 均有帐号 SQL,且密码均为 123,且均有其共享资料 Share 的写入权限,且未加入Administrators组
    Svr1 为 Win 2k3, 执行 OK
    Svr2 为 Win 2k8, 执行失败,提示"unkown user name or bad password"

    Why ???

    Try SQL Server 2008 QQ:315054403 dgdba@hotmail.com
    2009年12月15日 10:01

答案

全部回复

  • Ran both on each server? Win2k8 has more security restrictions than win2k3.
    2009年12月15日 14:47
  • 不管有多少安全限制。。。我求解的结果是能将文件复制过去喽<备份>....
    Try SQL Server 2008 QQ:315054403 dgdba@hotmail.com
    2009年12月16日 3:44
  • Then you have to put them in domain and start sql with domain account.
    2009年12月16日 3:47
  • Exec XP_CMDShell 'dir \\Svr2\Share\'--查看有沒有權限,沒結果時設置共享文件對應的賬號

    可測試把共享文件夾改為Everyone權限

    ROY WU(吳熹)
    2009年12月16日 4:37
    版主
  • xp_cmdshell 使用 sql server 服务的启动用户来获取对操作系统及网络的操作权限(而不是当前登录的用户)
    所以, 你应该检查你的服务启动用户, 如果不是用域用户, 则应该保证两台sql用户的启动用户名称和密码一样.
    2009年12月16日 4:40
  • 另外, 如果你仅仅是为了复制文件, 那么你可以通过 xp_cmdshell 做用户映射, 这样就可以不理会sql服务的启动用户
    Exec XP_CMDShell 'net use  \\Svr1\Share\ "用户密码" /USER:Srv1\用户名'
    Exec XP_CMDShell 'Copy D:\A.txt \\Svr1\Share\'
    • 已标记为答案 iDBApp 2009年12月16日 8:38
    2009年12月16日 4:43
  • 感谢各位热心关注

    试了邹建同学的路子<好思路>,若我在CMD环境下,执行是OK的,
    但在SQL SERVER里用 XP_CMDShell 提示错误

    System error 67 has occurred.
    NULL
    The network name cannot be found.

    Exec XP_CMDShell 'Copy D:\A.txt \\Svr1\Share\'
    提示:
    Logon failure: unknown user name or bad password.
            0 file(s) copied.

    仅是在UNC SVR 为 Win2k8 有此问题,若 UNC SVR为 Win2k3一切顺利


    Try SQL Server 2008 QQ:315054403 dgdba@hotmail.com
    2009年12月16日 8:19
  • 原因找到,在此谢罪。。汗

    原来源SVR的SQL与目标Win2k3里的SQL密码有被改过。。。
    而我用Win2k8建的SQL使用了旧密码所致。。。


    Try SQL Server 2008 QQ:315054403 dgdba@hotmail.com
    2009年12月16日 8:38