我有一个sqlcmd命令,它会将结果提供给一个放在共享文件夹中的文件。
exec xp_cmdshell 'sqlcmd -s $dataSource -d $dbName -i $inputFilePath -o $outputFilePath'
现在,如果共享驱动器受到保护并需要用户名和密码,该怎么办? 如何在Sqlcmd中提供凭证以绕过身份验证。
答案 0 :(得分:1)
xp_cmdshell
将在NT(Windows)凭据下执行:
CREATE CREDENTIAL
如果你坚持使用默认上下文访问远程资源(文件共享),那么你就是没有桨的上坡shitcreek,因为模拟对远程资源的访问是“双跳”并且需要constrained delegation为其中一个案例(使用NT登录)。
更好的选择是在本地将远程共享\\server\share
明确映射为驱动器X:
,然后再访问驱动器X:
。在本地映射驱动器允许存储持久凭据,但您必须小心确保映射在服务帐户会话中可见。哪个......基本上不可能,请参阅Map a network drive to be used by a service。
既然你知道为什么你不能正确地做到这一点并且你会自己拉扯自己的头发,同时变得白皙,不断努力解决失败问题,退后一步从不同角度看问题:为什么你想使用xp_cmdshell
来致电sqlcmd
?从作业/流程直接致电sqlcmd
。 SQL Agent具有您需要的所有支持,只需将作业设置为在具有适当凭据的代理帐户下运行即可连接远程共享和目标$datasource
。