繁体   English   中英

使用sqlcmd命令将结果获取到具有用户名和密码保护的共享路径中的文件

[英]using sqlcmd command to get the result to a file in a shared path with user name and password protection

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

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

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

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

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

如果您坚持使用默认上下文访问远程资源(文件共享),那么您将无所适从,因为对远程资源的模拟访问是“双跳”,并且在某些情况下要求约束委派 (例如,使用NT登录)。

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

现在,您知道了为什么不能正确执行此操作,并且会自己拉头发,同时要从不断奋斗中变白以解决故障,退后一步并从另一个角度查看问题:为什么要使用xp_cmdshell调用sqlcmd吗? 从作业/进程直接调用sqlcmd SQL代理拥有所有支持你需要的,只是设置工作,根据与appropiate凭据的代理帐户运行的同时连接到远程共享和目标$datasource

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM