s-s-rS 报告,SQL Linkedservers,用户“NT AUTHORITY\ANONYMOUS LOGON”登录失败

Posted

技术标签:

【中文标题】s-s-rS 报告,SQL Linkedservers,用户“NT AUTHORITY\\ANONYMOUS LOGON”登录失败【英文标题】:s-s-rS Report, SQL Linkedservers, Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON's-s-rS 报告,SQL Linkedservers,用户“NT AUTHORITY\ANONYMOUS LOGON”登录失败 【发布时间】:2014-06-20 19:48:23 【问题描述】:

我创建了一个针对 2 个数据库“A”和“B”的报告。在我的报告中,我使用到数据库“A”的静态数据源连接以及也使用此数据源的数据集。此数据源使用 Windows 身份验证。在数据库“A”上,我使用这行代码将服务器“B”链接到它: exec sp_addlinkedserver @server='',@srvproduct='',@provider='SQLNCLI',@datasrc=''。在“A”上,我创建了一个可以在 SSMS 中成功执行“A”和“B”查询的工作存储过程。

在我的报告中,我有一个@ServerName 参数,它将正确的值传递给存储过程。我知道它的工作原理,因为服务器“A”在我的报告中使用“预览”选项卡和部署时工作。但是服务器“B”总是根据标题收到相同的错误消息。我认为这与我的静态连接字符串有关,但是由于存储过程可以正常工作,它不应该只需要连接到服务器“A”吗?

我试图尽可能彻底。我已经为此奋斗了 2 天,希望能将这个简单的问题扼杀在萌芽状态,非常感谢。

【问题讨论】:

您遇到了如here 所述的臭名昭著的双跳问题。 虽然不涉及IIS。 没关系,您仍在从 s-s-rS -> ServerA -> ServerB 传递凭据。从客户端 -> IIS -> 数据库解决 Kerberos 委派问题所需的 SPN 将相同。即使 s-s-rS 不使用 IIS,除了 SQL Server SPN 之外,您还需要报表服务器的 HTTPsvc SPN。或者在链接服务器属性中使用静态安全上下文,不要与 SPN 混淆。 好的,谢谢您的回复我目前正在等待创建一个静态帐户并对其进行测试。 【参考方案1】:

问题基本上是这样的:

您连接到 ServerA - 但它没有将您的凭据传递给 ServerB。

查看Linked Server Security 和sp_addlinkedsrvlogin。

一种方法是设置模拟,其中来自用户“x”的任何连接(您在连接到 ServerA 时传递的内容)都使用特定用户/通行证来连接到 ServerB。

另一种更危险的方法(屏幕截图)是设置任何与 ServerB 的连接以使用静态用户/通行证...至少,这可以用作快速而肮脏的测试。

【讨论】:

我忘了提到我还在服务器 A 的 Report Services 配置管理器下添加了一个执行帐户...这会起作用吗?我的连接字符串很简单,只是连接到 ServerA 和 dbname,使用 windows auth。 那些将是未转发到 ServerB 的凭据。如果您在 ServerA 上设置本地映射以使用有效的 ServerB 帐户,应该没问题。查看屏幕截图(带有本地用户到远程用户/传递数据的大型白色映射框)。 等待 sql server admin 创建一个账户进行测试,会让你知道结果。感谢您的帮助,我希望它有效。 我让我的 SQL 管理员创建了一个具有只读权限的 sql 帐户,在“链接服务器属性”框中添加了凭据,并将报告的数据源从 Windows 身份验证切换到了那些新创建的凭据。感谢 JiggsJedi 和 Beargle 的帮助。

以上是关于s-s-rS 报告,SQL Linkedservers,用户“NT AUTHORITY\ANONYMOUS LOGON”登录失败的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 报告服务 (s-s-rS) 事件

使用存储过程的 s-s-rS 报告

SQL Server 2008 R2 / s-s-rS 2008:服务水平报告创建

针对 SQL Server 使用 s-s-rS 报告时出错

获取 s-s-rS 报告以显示 SQLexception

s-s-rS 报告,SQL Linkedservers,用户“NT AUTHORITY\ANONYMOUS LOGON”登录失败