我要做的是在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文件(并知道它的密码)。这有帮助吗?
感谢您的帮助...
祝福 迈克尔