SSRS - Users Table



我已经做了一些挖掘,但无法找到有关在ReportServer数据库中创建的Users表的具体信息?

首先我想检查用户进入这个表的入口点是什么?在我们的表中,看起来几乎所有的域登录都存在于这个表中…这就引出了下一个问题……这些实际上是链接到所有的域帐户(我认为不是)。我只是想确保,如果一个域帐户被禁用,该用户拥有的任何订阅都不会在下次运行尝试时失败。

对于这个相对较暗的区域,任何帮助都是非常感谢的。

的问候克里斯。

在回答之前,让我提醒您,SSRS数据库没有正式文档,因此以下答案仅基于我的产品经验,因此它们可能是错误的/不完整的。

用户进入该表的入口点是什么?

  • GetUserIDBySidGetUserIDByName存储过程,由GetUserID存储过程调用。
  • GetPrincipalID存储过程,由UpdatePolicyPrincipal存储过程调用。

这个名字可能会让人混淆,因为实际上这些sp不仅仅是获取用户ID。
如果用户在数据库中不存在,则插入

现在应该出现一个额外的问题:

这些SPs何时执行?

显而易见的答案是"当SSRS需要获取用户ID时"。
例如,当

  • 为该特定用户创建策略
  • 用户执行报告
  • 用户安排订阅

如果用户属于对报表具有访问权限的组,并且从未执行过任何需要获取其user ID的操作,则他不应该出现在Users表中。

这些真的链接到域帐户吗

不,如果您从AD中删除该帐户,它将留在Users表中。
如果出于某种原因需要链接它们,可以使用以下信息:

  • 用户登录:UserName
  • 安全ID: Sid

奖金问题/答案:

Users表包含什么信息?

  • UserID:生成的GUID (NEWID())
  • Sid:安全ID,如果需要从用户登录中找到安全ID,可以使用SUSER_SID函数
  • UserType: UserType
  • AuthType: LoginType
  • UserName: NT用户/组登录

文章节选:

Users:该表包含报表服务器用户的详细访问信息,包括运行报表的用户和发布报表的用户。

SSRS保留自己的与其安全性相关联的用户和组表,因此即使用户帐户已从Active Directory系统中删除,也可以在ReportServer数据库中引用它

下面的查询将显示每个用户有权访问哪个报告:

SELECT u.UserName, r.RoleName, c.Path, c.Name 
FROM dbo.Users as u 
INNER JOIN dbo.PolicyUserRole as pr ON u.UserID=pr.UserID
INNER JOIN dbo.Roles as r on pr.RoleID = r.RoleID 
INNER JOIN dbo.Catalog as c on pr.PolicyID = c.PolicyID 
ORDER BY u.UserName 

最新更新