在下列情况下尝试批量插入到SQL时遇到问题:
当我尝试和批量上传时,我得到的错误
Cannot bulk load because the file <filename> could not be opened. Operating system error code 5(Access is denied.).
现在我知道我们在这里有一个双跳的问题,需要整理委托。 已经为SQL设置了SPN,如下所示(SQL正在另一个端口上运行)。 SQL以域用户身份运行,并且SPN位于该帐户上。
command: setspn -l domain\sqluser result: MSSQLSvc/WIN-D04V1IOTESN MSSQLSvc/WIN-D04V1IOTESN.domain.local MSSQLSvc/win-d04v1iotesn.domain.local:55037 MSSQLSvc/WIN-D04V1IOTESN:55037
我也设置了从SQL用户帐户到CIFS和HOST的文件服务器的委派,但是无济于事。
我已启用Kerberos日志logging,并在事件查看器中看到以下事件:
A Kerberos Error Message was received: on logon session Client Time: Server Time: 14:44:10.0000 8/9/2011 Z Error Code: 0xe KDC_ERR_ETYPE_NOTSUPP Extended Error: Client Realm: Client Name: Server Realm: domain.LOCAL Server Name: krbtgt/domain.LOCAL Target Name: krbtgt/[email protected] Error Text: File: 9 Line: efb Error Data is in record data.
那么,有什么想法,我在这里失踪? 我以前有过这种委派,但是在默认端口上总是使用SQL,可能会有什么影响吗?
编辑
我现在也看到这个Kerbors错误和第一个一起:
A Kerberos Error Message was received: on logon session Client Time: Server Time: 15:4:10.0000 8/9/2011 Z Error Code: 0xe KDC_ERR_ETYPE_NOTSUPP Extended Error: Client Realm: Client Name: Server Realm: domain.LOCAL Server Name: krbtgt/domain.LOCAL Target Name: krbtgt/[email protected] Error Text: File: 9 Line: efb Error Data is in record data.
从注释中,您使用域login连接到SQL,因此SQL在连接到文件共享时试图模拟您。 如果您没有为您的域帐户设置此委派,那么它将失败。
当运行存储过程作为SQLlogin连接时,SQL将尝试使用它所运行的域服务帐户,对此,您已经设置了委派。
如果您使用域服务帐户连接您的查询窗口SQL正在运行,因为它应该工作,因为该委派已经configuration。 为您自己的域帐户设置代理信任到文件服务器,它应该开始工作。
SPN的外观正确的SQL Server。 文件服务器是否注册了正确的SPN?
另一件可以搞砸Kerberosauthentication到SQL Server的问题是DNS问题。 我读的地方,SQL客户端将做服务器的地址反向DNS查找,并使用该名称形成SPN。
我知道你已经做了许多这些步骤,但这应该是你需要做的一切。
确保SQL服务器和文件服务器的DNSparsing正常工作。
注册SQL Server的SPN。 确保没有重复的SPN。 在SQL 2008 setspn可以做这个检查你。
注册文件服务器的SPN。 确保没有重复。
在SQL Server服务帐户上启用“受信任委派”。
同时检查您的账户是否被标记为不可延迟。 (这是一个字?)
如果您无法使其正常工作,则可以设置SQL代理作业来取消批量插入。 然后它将在您configuration作业运行的帐户下运行。
错误消息中缺less客户端时间使我感到疑惑。 如果客户机上的时间和服务器上的时间太不相同,Kerberos身份validation将会失败。 (我从来不知道“真是太不一样了”,我知道一分钟可以做到这一点,因为昨天我们再次遇到了这个问题)。
Kerberos身份validation失败时,SSMS可能仍会连接,但会默默地回退到使用NTLM身份validation。
你可以通过调整连接设置和string来强制kerberos,这样如果Kerberosauthentication连接将会很难,但是有一个更简单的方法来查看你是否连接了Kerberos。 为确保您使用Kerberos身份validation进行连接,请通过SSMS正常连接,并在SSMS查询窗口中运行此操作:
从master.sys.dm_exec_connections中selectauth_scheme,其中session_id = @@ spid
你应该看到“KERBEROS”。 如果你不这样做,你可能会看到“NTLM”,你会知道有什么地方是错的。