我已经做了一些挖掘,但无法找到有关在ReportServer数据库中创建的Users表的具体信息?
首先我想检查用户进入这个表的入口点是什么?在我们的表中,看起来几乎所有的域登录都存在于这个表中…这就引出了下一个问题……这些实际上是链接到所有的域帐户(我认为不是)。我只是想确保,如果一个域帐户被禁用,该用户拥有的任何订阅都不会在下次运行尝试时失败。
对于这个相对较暗的区域,任何帮助都是非常感谢的。
的问候克里斯。
在回答之前,让我提醒您,SSRS数据库没有正式文档,因此以下答案仅基于我的产品经验,因此它们可能是错误的/不完整的。
用户进入该表的入口点是什么?
-
GetUserIDBySid
和GetUserIDByName
存储过程,由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