我正在将一个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'
得到了
命令成功完成。 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查询仍无法正常工作
答案 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。
希望它有所帮助。