SSRS报表服务器迁移:如何在Reportserver数据库中查询报表用户权限
SSRS报表授权用户与角色信息查询指南
在ReportServer数据库中,"Manage"视图下"Security"标签页的权限数据分散在几个核心表中,具体关联关系和查询方式如下:
核心数据表说明
- Catalog:存储所有报表、文件夹、数据源等对象的基础信息,通过
ItemID与权限策略关联,Name字段对应对象的显示名称。 - Users:记录系统内的用户和组信息,
UserID是唯一标识,UserName对应用户/组的账户名称。 - Roles:定义SSRS内置或自定义的角色(如Content Manager、Browser、Publisher等),
RoleID关联权限记录,Name为角色名称。 - Policies:存储每个对象的权限策略,
PolicyID是主键,ItemID关联Catalog中的具体对象。 - PolicyUserRole:用户、角色与权限策略的关联表,通过
PolicyID、UserID、RoleID三者绑定,实现用户-角色-对象的权限映射。
实用查询语句
查询指定报表的授权用户及角色
SELECT c.Name AS 报表名称, u.UserName AS 用户或组名称, r.Name AS 角色名称 FROM Catalog c INNER JOIN Policies p ON c.PolicyID = p.PolicyID INNER JOIN PolicyUserRole pur ON p.PolicyID = pur.PolicyID INNER JOIN Users u ON pur.UserID = u.UserID INNER JOIN Roles r ON pur.RoleID = r.RoleID WHERE c.Name = '目标报表名称' -- 替换为你要查询的报表名称 ORDER BY u.UserName, r.Name;
查询所有对象的完整权限信息
如果需要导出全量权限数据用于迁移,只需移除上述SQL中的WHERE条件即可:
SELECT c.Name AS 对象名称, c.Type AS 对象类型, -- 1=文件夹,2=报表,5=数据源等 u.UserName AS 用户或组名称, r.Name AS 角色名称 FROM Catalog c INNER JOIN Policies p ON c.PolicyID = p.PolicyID INNER JOIN PolicyUserRole pur ON p.PolicyID = pur.PolicyID INNER JOIN Users u ON pur.UserID = u.UserID INNER JOIN Roles r ON pur.RoleID = r.RoleID ORDER BY c.Name, u.UserName;
注意:不同SSRS版本的表字段可能存在细微差异,执行前建议先核对表结构。
内容的提问来源于stack exchange,提问作者user1982778
相关产品推荐
相关产品推荐

