0

我有一个 sqlcmd 命令,它会将结果提供给将放置在共享文件夹中的文件。

exec xp_cmdshell 'sqlcmd -s $dataSource -d $dbName -i $inputFilePath -o $outputFilePath'

现在,如果共享驱动器受到保护并且需要用户名和密码怎么办。如何在 Sqlcmd 中提供凭据以绕过身份验证。

4

1 回答 1

1

xp_cmdshell将在以下 NT (Windows) 凭据下执行:

  • 如果使用 Windows 凭据登录,则模拟登录
  • 服务帐户(如果使用 SQL 凭据登录且不存在显式凭据对象)
  • 使用与凭据关联的 SQL 凭据登录显式凭据(请参阅CREATE CREDENTIAL

如果您坚持使用默认上下文访问远程资源(文件共享),那么您将在没有桨的情况下上坡,因为对远程资源的模拟访问是“双跳”并且至少在其中一种情况下需要约束委派(使用 NT 登录)。

更好的选择是将远程共享\\server\share在本地显式映射为驱动器X:,然后改为访问驱动器X:。在本地映射驱动器允许存储持久的凭据,但您必须小心确保映射在服务帐户会话中可见。这...基本上是不可能的,请参阅Map a network drive to be used by a service

既然你知道为什么你不能正确地做到这一点,你会自找麻烦,同时从不断努力解决故障中变白,退后一步,从不同的角度看待问题:你为什么要使用xp_cmdshell打电话sqlcmdsqlcmd从作业/流程直接调用。SQL 代理具有您需要的所有支持,只需将作业设置为在具有适当凭据的代理帐户下运行,以连接到远程共享和目标$datasource

于 2013-10-08T09:17:39.933 回答