我有几个条目,这种问题,并没有一个似乎为我解决它。大容量插入失败SQL代理作业,文件未找到
我的SQL SERVER和SQL SERVER AGENT服务都设置为相同的用户帐户。
我有一个存储过程,其执行以下操作(错误检查cruft的移除)
exec XP_CMDSHELL 'net use P: \\machine/share password /user:machine\user'
exec XP_CMDSHELL 'dir p: /b /a-d-h-s > p:\dir.txt'
CREATE TABLE #FilesTemp (Filename varchar(200))
BULK INSERT #FilesTemp
FROM 'p:\dir.txt'
WITH
(
ROWTERMINATOR = '\n'
)
当我运行从SSMS存储过程,它运行良好。当我通过作业运行它时,XP_CMDSHELL调用正常工作,并创建'dir.txt'文件。但批量插入失败,错误3(找不到p:\ dir.txt)。
我登录到SSMS,使用'sa'连接到SQL Server,并且作业归sa所有。正在创建共享的用户具有必要的权限。
更多信息:
有放置(然后删除显然)评论询问我是不是从服务器计算机上运行SSMS与否。我尝试过这个。
显然,当我使用Windows身份验证运行时,大容量插入失败,但是作为SA运行存储过程时,它工作。代理正在使用Windows身份验证运行并失败。
但是为什么?我无法理解安全问题。
有什么想法?
的安全 轮廓不幸的是,我得到一个登录错误,当我尝试。 –
问题是批量复制是在SQL Server的安全上下文中完成的。你不能使用映射驱动器,只能使用unc路径。如果服务器帐户不能被授予访问权限,那么将该角色复制到本地驱动器并从那里导入 – Mike
显然,使用sa登录到SQL Server时它运行良好。查看更新的帖子。所以,它*可以*使用映射的驱动器。但是,显然存在安全问题。 –