在旧的SSRS上,这个特定的服务器是2008R2。
下面的查询为我提供了所有报告的名称、位置、创建和修改概述。我还想至少包括“连接字符串”,以及一些其他细节,如果可能的话,从数据源属性。但我在ReportServer里找不到它。我见过有人用PowerShell来摆脱SSRS服务,我希望能找到一种T解决方案。
如何使用SQL查询显示数据源详细信息?
--List all the reports on SSRS via "ReportServer" database
USE [ReportServer]
GO
SELECT Name
--, [ItemID] --Primary key
, [Path]
, [Description]
--, [CreatedByID] --need link to get anything usable from here
, Created.UserName as CreatedByUser
, [CreationDate]
--, [ModifiedByID] --need link to get anything usable from here
, Modified.UserName as ModifiedByUser
, [ModifiedDate]
FROM [dbo].[Catalog]
left join (select [UserID]
, [UserName]
from [dbo].[Users]) as Created
on Catalog.CreatedByID = Created.UserID
left join (select [UserID]
, [UserName]
from [dbo].[Users]) as Modified
on Catalog.ModifiedByID = Modified.UserID
WHERE [Type] = 2 -- value per foundation Source http://sqlsrv4living.blogspot.com/2014/01/ssrs-get-list-of-all-reports-using.html
ORDER BY [Path], Name发布于 2016-05-11 16:06:49
从ReportServer获取Source -我也希望包含“连接字符串”--至少如何使用一个SQL查询来显示数据源详细信息?
-- Transact-SQL script to get connection string of all SSRS Shared Datasources.
/*
Let's say you want to move a database to an other SQL Server, but which of the SSRS Shared Datasources uses this database and must be changed afterwards?
With this Transact-SQL query for ReportServer database you get the connection string of all Shared Datasources,
to document the usage or to search for a specific server/database.
Please remark: Querying the ReportServer database directly is not a supported way.
Works with SSRS 2005 and higher version ReportServer databases.
Requieres select rights on the "Catalog" table in ReportServer database.
*/
-- Connection strings of all SSRS Shared Datasources
;WITH XMLNAMESPACES -- XML namespace def must be the first in with clause.
(DEFAULT 'http://schemas.microsoft.com/sqlserver/reporting/2006/03/reportdatasource'
,'http://schemas.microsoft.com/SQLServer/reporting/reportdesigner'
AS rd)
,SDS AS
(SELECT SDS.name AS SharedDsName
,SDS.[Path]
,CONVERT(xml, CONVERT(varbinary(max), content)) AS DEF
FROM dbo.[Catalog] AS SDS
WHERE SDS.Type = 5) -- 5 = Shared Datasource
SELECT CON.[Path]
,CON.SharedDsName
,CON.ConnString
FROM
(SELECT SDS.[Path]
,SDS.SharedDsName
,DSN.value('ConnectString[1]', 'varchar(150)') AS ConnString
FROM SDS
CROSS APPLY
SDS.DEF.nodes('/DataSourceDefinition') AS R(DSN)
) AS CON
-- Optional filter:
-- WHERE CON.ConnString LIKE '%Initial Catalog%=%TFS%'
ORDER BY CON.[Path]
,CON.SharedDsName;添加数据源名称
USE [ReportServer]
GO
SELECT CATALOG.NAME
,CATALOG.[Path]
,DataSource.NAME datasource
,CATALOG.[Description]
,Created.UserName AS CreatedByUser
,CATALOG.[CreationDate]
,Modified.UserName AS ModifiedByUser
,CATALOG.[ModifiedDate]
FROM [dbo].[Catalog]
LEFT JOIN (
SELECT [UserID]
,[UserName]
FROM [dbo].[Users]
) AS Created ON CATALOG.CreatedByID = Created.UserID
LEFT JOIN (
SELECT [UserID]
,[UserName]
FROM [dbo].[Users]
) AS Modified ON CATALOG.ModifiedByID = Modified.UserID
JOIN DataSource ON CATALOG.ItemID = DataSource.ItemID
JOIN CATALOG cat1 ON DataSource.Link = cat1.ItemID
WHERE CATALOG.[Type] = 2
ORDER BY [Path]
,NAME发布于 2016-05-11 16:09:27
你不能这么做。
当您将数据源和报表定义上载到报表服务器时,它确实会将它们的信息存储在dbo.Catalog表中,您可以看到它们使用的是转换( XML )、转换(Varbinary(最大)、内容),并且由于它是XML,所以可以使用XPath提取您感兴趣的字段。
一旦您修改了SSRS上的任何内容,问题就会真正开始。
如果您更改了共享数据源中的连接字符串,或者修改了报表的数据源,SSRS将保留目录条目原样,而是将一个带有加密ConnectionString的条目添加到该表中,以保存更新的内容。
虽然您不能在这里解密它,但您可以提取一些连接字符串,然后标记过时的连接字符串;但是,我还没有找到它如何存储旧/新内容之间的链接。
这一点以前也曾在Ask SSC上讨论过,他们得出了基本相同的结论,https://ask.sqlservercentral.com/questions/20328/decrypting-datasources-in-ssrs.html。
在讨论相同的http://www.sqlservercentral.com/Forums/Topic1312030-150-1.aspx时,有一部分脚本用于调用SSC本身上的web和WMI
我鼓励您解决这个问题,并尝试提出一个PowerShell解决方案,因为随着Server复杂性的不断增加,尝试在the中完成一切都是不可行的。
发布于 2019-05-15 22:18:16
使用Powershell的ReportingServicesTools模块获取数据源的详细信息可能是最好的( get ),因为它能够提取和解密数据源的ConnectString (其中没有密码或用户名信息),还可以给出它在单独字段中可能使用的用户名。它通过SOAP提供程序执行此操作。
存储在目录表(type=5)中的数据资源通常也会将其ConnectionString存储在内容字段中,然后您可以尝试使用XPath查询提取该字段。但是在我的服务器上,我有两个这样的数据源,它们的连接信息以某种方式存储在其他地方,因此基于SQL的查询不返回连接字符串信息。然而,ReportingServicesTools get-RsDatasource函数将返回它们的连接字符串。
我也有一堆第三方系统提供的报告,他们有自己的自定义提供者。它们不会将连接字符串存储在它们的RDL或ReportingServices..Catalog或ReportingServices..Datasource表中。为这些报告的连接返回bupkus。
我想,如果我更有动力,我会在我的the查询中添加更多的内容,以尝试从RDL中获取连接信息。但是除了应用程序报告,我们内部开发的报告都使用共享数据源,所以我的动机很低。
ymmv
https://dba.stackexchange.com/questions/138236
复制相似问题