【发布时间】:2017-07-05 03:33:54
【问题描述】:
我们最近将所有数据库从 MyServerA 移至 MyServerB。在MyServerA 上一切正常,但是当我尝试使用xp_cmdshell 调用bcp 命令时,出现以下错误:
Error = [Microsoft][SQL Server Native Client 11.0]Unable to open BCP host data-file
一些信息:
我很确定我以
MyServerB身份登录的用户拥有分配给我要发布到的远程服务器位置的权限。我在命令提示符下运行了一个“whoami”,并成功地将它们添加到安全下,并完全控制远程文件夹(顺便说一句是共享的)。另外,我可以映射到它或访问它。有趣的是,当尝试发送一个已经存在的文件时,即来自我尝试发送到的同一位置,作为使用
sp_send_dbmail的附件,我收到了Access denied消息。所以这似乎是一个安全问题。但请参见上面的#1。我也尝试将其保存在本地
MyServerB的文件夹中,但我也无法这样做。
示例代码:
DECLARE @bcp varchar(2000);
SET @bcp = 'bcp "SELECT 1" queryout "\\MyServerA\Reports\MyFile.txt" -c -T -S MyServerB';
EXEC master..xp_cmdshell @bcp;
【问题讨论】:
-
bcp是不是文本导出工具。你为什么不使用SSIS?您必须提升权限才能运行xp_cmdshell的事实应该是一个警告。 -
无论如何,为什么要从 SQL Server 内部运行
bcp?您可以从命令行运行它或安排它在计划任务中定期运行。您还可以安排命令从 SQL 代理运行。运行xp_cmdshell需要削弱安全性。 -
这是我继承的。我现在被授权更新到 SSIS 或更改脚本或方法。这是在原样之前工作的,他们希望它按原样修复。不过感谢您的建议。
标签: sql-server bcp xp-cmdshell sp-send-dbmail