【问题标题】:SQL Server Unable to open BCP host data-fileSQL Server 无法打开 BCP 主机数据文件
【发布时间】: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

一些信息:

  1. 我很确定我以MyServerB 身份登录的用户拥有分配给我要发布到的远程服务器位置的权限。我在命令提示符下运行了一个“whoami”,并成功地将它们添加到安全下,并完全控制远程文件夹(顺便说一句是共享的)。另外,我可以映射到它或访问它。

  2. 有趣的是,当尝试发送一个已经存在的文件时,即来自我尝试发送到的同一位置,作为使用sp_send_dbmail 的附件,我收到了Access denied 消息。所以这似乎是一个安全问题。但请参见上面的#1。

  3. 我也尝试将其保存在本地 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


【解决方案1】:

去找一位专家朋友。问题是我需要为 SQL Server 尝试执行 xp_cmdshell 的服务帐户提供权限。

挑战是在查看与运行的 SQL Server 服务关联的“登录”帐户时,“服务”帐户的名称有所不同。那有一个与默认实例名称关联的 NT 帐户。您要选择的是名为“SERVICE”的帐户。

此外,旧机器似乎无需将此帐户添加到该权限即可工作。

无论如何,它现在可以工作了。

感谢您的帮助和关注。

【讨论】:

    【解决方案2】:

    从 xp_cmdshell 运行 whoami,我相信它会给你一个线索,接下来需要做什么。

    【讨论】:

    • 我确实运行了“whoami”,这就是为什么我确信权限设置正确
    猜你喜欢
    • 2023-03-12
    • 2017-01-20
    • 1970-01-01
    • 2020-02-02
    • 2016-11-22
    • 1970-01-01
    • 2010-10-01
    • 2017-07-23
    • 1970-01-01
    相关资源
    最近更新 更多