从SSRS数据库获取订户的名称

时间:2018-02-07 12:09:16

标签: sql-server tsql encryption reporting-services

我要做的是在MS SQL Server报表服务器(SSRS)中创建有关订阅失败的报表。到目前为止我所做的是以下SQL语句:

USE ReportServer
GO

WITH SubscriptionsCTE AS
(
   SELECT
      c.[Name],
      c.[Path],
      s.[Description],
      s.LastStatus,
      s.LastRunTime,
      CONVERT(xml, s.ExtensionSettings) AS ExtensionSettings,
      s.DeliveryExtension
   FROM
      dbo.Subscriptions s
      INNER JOIN dbo.[Catalog] c ON c.ItemID = s.Report_OID
   WHERE
      s.LastStatus LIKE 'Failure%'
)
SELECT
   [Name],
   [Path],
   [Description],
   LastStatus,
   LastRuntime,
   CASE
      WHEN DeliveryExtension = 'Report Server FileShare' THEN (SELECT e.c.value('(Value/text())[1]', 'nvarchar(max)') FROM ExtensionSettings.nodes('ParameterValues/ParameterValue') e(c) WHERE e.c.value('(Name/text())[1]', 'nvarchar(max)') = 'USERNAME')
      WHEN DeliveryExtension = 'Report Server Email' THEN (SELECT e.c.value('(Value/text())[1]', 'nvarchar(max)') FROM ExtensionSettings.nodes('ParameterValues/ParameterValue') e(c) WHERE e.c.value('(Name/text())[1]', 'nvarchar(max)') = 'TO')
      ELSE NULL
   END AS Subscriber
FROM
   SubscriptionsCTE

问题是字段订阅者是为FileShare订阅加密的。我知道它是用于密码...但是对于用户名?作为管理员,我可以通过GUI访问订阅,但查看每个报告的管理面板以查找用户名是一件痛苦的事。

我做了类似

的事情
CASE WHEN Subscriber = '(some encrypted string)' THEN 'User 1'
   WHEN Subscriber = '(some other encrypted string)' THEN 'User 2'
   (etc.)
   ELSE NULL
END AS Subscriber

但显然,它在每条记录中都没有以相同的方式加密,因此“用户1”在每个订阅中都有一个不同的加密字符串。

有没有办法解密这些字符串?我有来自Report Server证书备份的.snk文件(并知道它的密码)。这有帮助吗?

感谢您的帮助...

祝福 迈克尔

0 个答案:

没有答案