首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从ReportServer获取SSRS数据资源

从ReportServer获取SSRS数据资源
EN

Database Administration用户
提问于 2016-05-11 15:25:29
回答 4查看 39.1K关注 0票数 11

在旧的SSRS上,这个特定的服务器是2008R2。

下面的查询为我提供了所有报告的名称、位置、创建和修改概述。我还想至少包括“连接字符串”,以及一些其他细节,如果可能的话,从数据源属性。但我在ReportServer里找不到它。我见过有人用PowerShell来摆脱SSRS服务,我希望能找到一种T解决方案。

如何使用SQL查询显示数据源详细信息?

代码语言:javascript
复制
--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
EN

回答 4

Database Administration用户

回答已采纳

发布于 2016-05-11 16:06:49

从ReportServer获取Source -我也希望包含“连接字符串”--至少如何使用一个SQL查询来显示数据源详细信息?

用于获取SSRS数据源的连接字符串的TSQL

代码语言:javascript
复制
-- 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;

这里还有一个查询,可以使用TSQL:

添加数据源名称

代码语言:javascript
复制
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
票数 13
EN

Database Administration用户

发布于 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中完成一切都是不可行的。

票数 10
EN

Database Administration用户

发布于 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

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/138236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档