xp_cmdshell发生网络错误
xp_cmdshell a network error has occurred
我正在将 SQL 数据库从我的 C:\ 移动到服务器,我对此有点陌生。我使用 Openrowset
和 Opendatasource
从 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'
得到了
The command completed successfully. NULL NULL
那我运行:
exec xp_cmdshell 'net use'
并得到:
New connections will be remembered. NULL NULL Status Local
Remote Network NULL
------------------------------------------------------------------------------- OK G: 2.16.0.32\Finance Microsoft Windows
Network The command completed successfully. NULL NULL
但是我 运行 这个并得到一个错误:
exec xp_cmdshell 'Dir G:'
An unexpected network error occurred. NULL
如果有人能提供帮助,那就太好了!
更新:
我删除了驱动器并重新映射,重新启动服务器并重新启动服务
exec xp_cmdshell 'net use G: /delete'
exec xp_cmdshell 'net use G: 2.16.0.32\Finance'
然后我得到了这个:
exec xp_cmdshell 'Dir G:'
Volume in drive G is FileSharing1 Volume Serial Number is 20E1-DEF3
NULL Directory of G:\ NULL 06/22/2017 08:56 AM .
06/22/2017 08:56 AM .. 09/20/2017 09:37 AM
IMA Utilization Reports 03/09/2017 06:36 PM
Microsotf SQL Server 2014 02/15/2017 06:22 PM
Wellcare-Apixio Project
0 File(s) 0 bytes
5 Dir(s) 722,791,567,360 bytes free NULL
毕竟我的 OPENROWSET 查询仍然不起作用
我认为您在以下方面存在权限问题:
当您安装 SQL 服务器时,它会要求您配置 OS 帐户,SQL 服务器服务将在该帐户下 运行。如果该选项未更改,则您是 运行 默认帐户,并且在此上下文中默认帐户的含义在最近的版本中发生了一些变化。
在最新版本 (2016/2017) 中,这意味着您的服务将 运行 有一个以服务名称命名的特殊服务帐户。在我的开发机器中,该服务名为 MSSQL$DEV,因此我的服务 运行s 在 "NT Service\MSSQL$DEV" 帐户下。
如果您的服务是 2008 或更新版本,您可以查询 sys.dm_server_services 视图以找出有问题的帐户。有一列名为 service_account.
这些服务帐户的情况是它们通常无法访问网络。因此,在您的情况下 SQL 服务器可能无法访问 \\172.16.0.32\Finance 共享。
现在你提到xp_cmdshell。您可能可以通过配置 proxy account 使 xp_cmdshell 工作,但我相信您的最终目标是能够使用 OPENROWSET 等访问远程数据。 xp_cmdshell 的代理帐户对 OPENROWSET 没有任何好处。
那你能做什么?当您使用 Windows 身份验证连接到 SQL 服务器时,SQL 服务器通常会在访问外部资源(例如文件和网络共享)时尝试冒充您。您可能需要配置 Kerberos 委托等,但它确实有效。
如果您使用 SQL 帐户 (login/password) 连接到 SQL 服务器,或者无法使委托正常工作,另一种选择是更改 [= =38=] 服务器 运行s 到有权访问您需要的共享和文件的域帐户。不要使用域管理员,只需使用常规域帐户。更改服务帐户的最佳方法是使用 SQL Server Configuration Manager.
希望对您有所帮助。
我正在将 SQL 数据库从我的 C:\ 移动到服务器,我对此有点陌生。我使用 Openrowset
和 Opendatasource
从 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'
得到了
The command completed successfully. NULL NULL
那我运行:
exec xp_cmdshell 'net use'
并得到:
New connections will be remembered. NULL NULL Status Local
Remote Network NULL ------------------------------------------------------------------------------- OK G: 2.16.0.32\Finance Microsoft Windows Network The command completed successfully. NULL NULL
但是我 运行 这个并得到一个错误:
exec xp_cmdshell 'Dir G:'
An unexpected network error occurred. NULL
如果有人能提供帮助,那就太好了!
更新: 我删除了驱动器并重新映射,重新启动服务器并重新启动服务
exec xp_cmdshell 'net use G: /delete' exec xp_cmdshell 'net use G: 2.16.0.32\Finance'
然后我得到了这个:
exec xp_cmdshell 'Dir G:'
Volume in drive G is FileSharing1 Volume Serial Number is 20E1-DEF3 NULL Directory of G:\ NULL 06/22/2017 08:56 AM . 06/22/2017 08:56 AM .. 09/20/2017 09:37 AM
IMA Utilization Reports 03/09/2017 06:36 PM
Microsotf SQL Server 2014 02/15/2017 06:22 PM
Wellcare-Apixio Project 0 File(s) 0 bytes 5 Dir(s) 722,791,567,360 bytes free NULL
毕竟我的 OPENROWSET 查询仍然不起作用
我认为您在以下方面存在权限问题:
当您安装 SQL 服务器时,它会要求您配置 OS 帐户,SQL 服务器服务将在该帐户下 运行。如果该选项未更改,则您是 运行 默认帐户,并且在此上下文中默认帐户的含义在最近的版本中发生了一些变化。
在最新版本 (2016/2017) 中,这意味着您的服务将 运行 有一个以服务名称命名的特殊服务帐户。在我的开发机器中,该服务名为 MSSQL$DEV,因此我的服务 运行s 在 "NT Service\MSSQL$DEV" 帐户下。 如果您的服务是 2008 或更新版本,您可以查询 sys.dm_server_services 视图以找出有问题的帐户。有一列名为 service_account.
这些服务帐户的情况是它们通常无法访问网络。因此,在您的情况下 SQL 服务器可能无法访问 \\172.16.0.32\Finance 共享。
现在你提到xp_cmdshell。您可能可以通过配置 proxy account 使 xp_cmdshell 工作,但我相信您的最终目标是能够使用 OPENROWSET 等访问远程数据。 xp_cmdshell 的代理帐户对 OPENROWSET 没有任何好处。
那你能做什么?当您使用 Windows 身份验证连接到 SQL 服务器时,SQL 服务器通常会在访问外部资源(例如文件和网络共享)时尝试冒充您。您可能需要配置 Kerberos 委托等,但它确实有效。
如果您使用 SQL 帐户 (login/password) 连接到 SQL 服务器,或者无法使委托正常工作,另一种选择是更改 [= =38=] 服务器 运行s 到有权访问您需要的共享和文件的域帐户。不要使用域管理员,只需使用常规域帐户。更改服务帐户的最佳方法是使用 SQL Server Configuration Manager.
希望对您有所帮助。