我有两个服务器A和B. B是数据库服务器,A是(在这里)数据库服务器的客户端。 在服务器A上运行的工具连接到服务器B上的SQL Server,并最终触发从服务器A上共享的批量导入(\\ servera \ fileshare)。
服务器A上的工具作为本地系统运行。 domain \ servera $具有对服务器B上的SQL Server的必需访问权限。
问题是服务器B上的SQL Server无法访问\\ servera \ fileshare,尽pipeSQL服务帐户具有这样做的所有权限(在服务器A上)。 我发现这是因为SQL Server试图委派连接到该实用程序用于连接到SQL Server的帐户,并且失败,因为SQL Server服务帐户没有委派权(并且该设置不能被更改我)。
我还发现,如果我使用SQL身份validation(而不是Windows身份validation)使用SQL帐户(即不是Active Directory帐户)进行连接,SQL Server将使用SQL Server服务帐户连接到文件共享,并且一切正常。 该工具幸运地支持使用SQL帐户。 不幸的是,密码是以纯文本forms作为命令行参数给出的,然后出现在所有其他参数中的进程列表中。 不是很好。
有没有办法让SQL Server在连接到文件共享时使用自己的服务帐户,而不使用SQL帐户连接到SQL Server?
这是Windows Server 2003上的SQL Server 2008。
不幸的是,你目睹的行为是由devise:
http://msdn.microsoft.com/en-us/library/ms188365.aspx [安全帐户委托(模拟)] http://msdn.microsoft.com/en-us/library/ms175915.aspx [安全注意事项] http://msdn.microsoft.com/en-us/library/ms161965.aspx
从第二个环节:
SQL Server 2005和更高版本控制对文件的访问的方式解决了Microsoft SQL Server 2000及更早版本中存在的安全问题。 以前,用户通过身份validation后,访问外部文件是基于SQL Server进程的安全configuration文件。 当SQL Server进程具有对文件的读取权限时,对于无权访问文件但是是bulkadmin固定服务器angular色的成员的用户,用户可以使用BULK INSERT导入文件,并访问文件。
您唯一的select是使用SQL Serverlogin或为SQL Server提供执行委派所需的权限。
一个可能的解决scheme可能是运行一个作业,将文件从ServerA复制到ServerB(我假设你的服务帐户对它们都有写权限),然后ServerB上的SQL Server执行从本地磁盘导入。
您可以将您的Windowslogin映射到具有访问权限的凭证 :
create credential [...] with identity='domain\user', secret='domainpassword'; alter login [...] with credential=[...];
要小心,所以你最终不会在你的SQL证书存储中复制AD。 而且你需要devise一种保持SQL Server凭证数据库与AD同步的方式(密码更改等)。
从sql server代理运行它作为一项工作