为什么不在dba.stackexchange上询问:描述说这是针对专业人士的,我不是,因此有“爱好者”的一部分。
我有错误 “用户登录失败'NT AUTHORITY \ ANONYMOUS LOGON'”
这是一个常见错误,有几个可能的原因和解决方案。问题是我不了解数据库和服务器管理以及凭证认证主题,因此我需要花一些时间来了解所说和所提议的内容。 在我这样做之前,我想问一下,由于技术限制,我是否有可能无法解决问题。我现在将更详细地描述这种情况。
有一个带有数据库Adb和表dbo.At的MS SQL Server A.我可以从中读到。还有一个MS SQL Server B.我可以在这里阅读和写作。
我在计算机上打开了MS SQL Server Management Studio 2012。我与服务器A连接打开查询“select * from Adb.dbo.At”,这很好用。该连接使用Windows身份验证。 我与服务器B(Windows身份验证)连接查询“select * from A.Adb.dbo.At”,这导致上述错误。
此时我对A有读取权限,我有对B的读写权限。我可以从A导出数据然后使用我的计算机将其导入B,即我可以做一种复制粘贴和我最终会得到我想要的东西。这两台服务器之间没有不可逾越的墙,我是中间人。我只是想让它变得更容易。在我谈论SPN,代表团,Kerberos,Active Directory以及我想问的问题之外,如果假设我只读取A和读取/写入B,我可能无法解决问题吗?
答案 0 :(得分:1)
好像我有一个"双跳"问题
https://blogs.technet.microsoft.com/askds/2008/06/13/understanding-kerberos-double-hop/
我找到了一个解决方法。我可以在服务器B上使用服务器代理。使用此代理我可以使用服务器执行某些操作,例如查询其他服务器。代理作业属于特定类型(如T-SQL脚本)。对于特定的作业类型,代理可以在"运行为"模式(需要代理)。我创建了一个代理,指的是我正常的Windows登录。可悲的是,T-SQL脚本类型的作业无法在"中运行为"模式。但PowerShell类型的工作可以。 PowerShell还可以执行SQL语句。因此,我创建了使用代理运行的PowerShell作业,命令为:
SQLCMD -Q "select * into Bdb.dbo.Bt from A.dbA.dbo.At" -E
这解决了我的问题。