xp_cmdshell发生网络错误

时间:2017-10-31 19:06:02

标签: sql-server xp-cmdshell

我正在将一个SQL数据库从我的C:\移动到一个服务器,我对此有点新意。我使用OpenrowsetOpendatasource从Excel,Access和CSV文件中获取数据,但现在它只适用于固定驱动器(C:\或E :)。我正在尝试使用xp_CmdShell映射驱动器,这是我得到的:

首先,我跑了这个:

exec sp_configure 'xp_cmdshell', 1; 
reconfigure

然后这个:

exec xp_cmdshell 'net use G: \\172.16.0.32\Finance'

得到了

  

命令成功完成。 NULL NULL

然后我跑:

exec xp_cmdshell 'net use'

并获得:

  

将记住新的连接。 NULL NULL状态本地
  远程网络NULL   -------------------------------------------------- ----------------------------- OK G:\ 172.16.0.32 \ Finance Microsoft Windows   网络命令成功完成。 NULL NULL

但我跑了这个并得到一个错误:

exec xp_cmdshell 'Dir G:'
  

发生意外的网络错误。 NULL

如果有人可以提供帮助,那将是巨大的!

更新: 我删除了驱动器并重新映射它,重新启动服务器并重新启动服务

  

exec xp_cmdshell'net use G:/ delete'   exec xp_cmdshell'净使用G:\ 172.16.0.32 \ Finance'

然后我明白了:

exec xp_cmdshell 'Dir G:' 
  

驱动器G中的卷是FileSharing1卷序列号是20E1-DEF3   NULL目录G:\ NULL 06/22/2017 08:56 AM   06/22/2017 08:56 AM .. 09/20/2017 09:37 AM             IMA利用率报告03/09/2017 06:36 PM
  Microsotf SQL Server 2014 02/15/2017 06:22 PM
  Wellcare-Apixio项目                  0个文件0个字节                  5 Dir(s)722,791,567,360字节空闲NULL

毕竟我的OPENROWSET查询仍无法正常工作

1 个答案:

答案 0 :(得分:0)

我认为您有以下方式的权限问题:

安装SQL Server时,它会要求您配置运行SQL Server服务的操作系统帐户。如果未更改该选项,则表示您使用的是默认帐户,并且此上下文中默认帐户的平均值在最近版本中发生了一些变化。

在最新版本(2016/2017)中,这意味着您的服务将使用以服务名称命名的特殊服务帐户运行。在我的开发机器中,该服务名为MSSQL $ DEV,因此我的服务在“NT Service \ MSSQL $ DEV”帐户下运行。 如果您的服务是2008年或更新版本,则可以查询sys.dm_server_services视图以查找相关帐户。有一个名为service_account的列。

这些服务帐户的情况是他们通常无法访问网络。因此,在您的情况下,SQL Server可能无法访问\\ 172.16.0.32 \ Finance共享。

现在提到xp_cmdshell。您可以通过配置proxy account来使xp_cmdshell工作,但我相信您的最终目标是能够使用OPENROWSET等来访问远程数据。并且xp_cmdshell的代理帐户对OPENROWSET没有任何好处。

那你能做什么?使用Windows身份验证连接到SQL Server时,SQL Server通常会在访问外部资源(例如文件和网络共享)时尝试模拟您。您可能需要配置Kerberos委派等,但它确实有效。

如果使用SQL帐户(登录名/密码)连接到SQL Server,或者无法使委派功能正常工作,则另一个选项是将SQL Server运行的帐户更改为具有访问权限的域帐户您需要的份额和文件。不要使用域管理员,只使用常规域帐户。更改服务帐户的最佳方法是使用SQL Server Configuration Manager

希望它有所帮助。