s-s-rS 权限
Posted
技术标签:
【中文标题】s-s-rS 权限【英文标题】:s-s-rS Permissions 【发布时间】:2018-04-11 14:49:04 【问题描述】:我在互联网上查看过,但找不到任何直截了当的内容。我正在使用 s-s-rS(本机模式,在 VS 中开发报告)并且对权限有疑问,因为我担心我做得过火了。我们使用 AD 组进行 Windows 身份验证,以获取报表服务器上各种报表的权限。目前,它的设置方式是分别授予服务器、数据库和每个存储过程的权限(通过 SSMS)。在报表服务器 URL 上,授予站点设置、文件夹设置和报表级别的权限。
-
这太过分了吗?是否需要所有这些权限?
有没有更有效的方法来建立权限?
用户是否需要访问“数据源”和“数据集”文件夹才能运行报告?
我只想清理我们目前拥有的内容并使用最佳实践。在此先感谢!
【问题讨论】:
是的,所有权限都是必需的。是的,但您是否只想授予查看权限或发布等取决于您。参考bhushan.extreme-advice.com/user-roles-and-permissions-in-s-s-rs 您在整理权限时仍然遇到问题吗? 【参考方案1】:我一直在积极清理我们的报表服务器内容和标准。因此,这是我可以根据该经验提供的内容。
这是不是太过分了;所有这些权限都需要吗?
回答:Windows AD 组是设置报表服务器权限的好方法。最好有几个包含报表的文件夹,然后为文件夹提供所需的访问权限,并允许该文件夹中的所有报表继承文件夹安全性。子文件夹可能具有更高级别的安全性(我们已经在我们的报告环境中完成了其中的一些工作)。
有没有更有效的方法来建立权限?
回答:试着对服务器上需要哪些文件夹有一个很好的了解,在幻灯片或 Word 文档中组织这些信息。从您的管理层和业务负责人那里获得各个部门的支持。此外,分析任何现有的报告系统并尝试确定它们如何适应用户访问。至于存储过程权限,最好让您的 DBA 使用对您的各种数据源进行身份验证的同一用户授予存储过程权限,并使用同一用户(例如“myDomain\s-s-rsreports”)。
用户是否需要访问“数据源”和“数据集”文件夹才能运行报告?
回答:用户不需要访问这些文件夹。只要共享数据源通过“Windows 帐户”或“SQL Server 帐户”进行身份验证,引用该数据源的数据集将为所有可以访问报告的用户执行。
进一步阅读...
如果您可以访问 Pluralsight 培训网站,那里有一些 s-s-rS 的好视频。如果您没有 Pluralsight 订阅,则可以使用 Microsoft Visual Studio Dev Essentials 帐户免费试用 3 个月,该帐户可免费创建。
Reporting Services Report Server Administration Reporting Services Report Development Fundamentals Part 1 Microsoft Visual Studio Dev Essentials【讨论】:
【参考方案2】:我将按 AD 组/报告文件夹分隔权限。转到个人报告级别有点矫枉过正。
我还为报表文件夹创建了一些新角色,以按文件夹级别管理谁可以阅读报表以及谁拥有它们。在 s-s-rS 中,必须在 SQL Server Management Studio、SSMS 中执行新角色和对现有角色的调整。打开 SSMS 后,点击“连接”并选择“报告服务...”
输入您的服务器名称和登录信息,然后单击连接。
连接到报表服务器后,打开安全文件夹右键单击“角色”,然后单击“新建角色...”
我创建了 2 个与“浏览器”具有相同权限的新角色(“浏览器组”、“功能所有者”)。
然后在报告管理器上单击文件夹的向下箭头并选择“安全”
然后点击“新角色分配”
然后输入 Active Directory 组或电子邮件地址并检查您创建的新角色。
然后您可以向服务器查询权限并将其显示在报告中。
;WITH
catalog_type_description
AS
(
SELECT tbl.* FROM (VALUES
( 1, 'Folder')
, ( 2, 'Report')
, ( 3, 'Resource')
, ( 4, 'Linked Report')
, ( 5, 'Data Source')
, ( 6, 'Report Model')
, ( 8, 'Shared Dataset')
, ( 9, 'Report Part')
) tbl ([TypeID], [TypeDescription])
WHERE
TypeID = 1
)
,
nonreport_folders
AS
(
SELECT tbl.* FROM (VALUES
( 'Images')
, ( 'SharedDataSets')
, ( 'Data Sources')
, ( '')
) tbl ([FolderName])
)
,
reporting_role_names -- added roles to the report server
AS
(
SELECT tbl.* FROM (VALUES
( 'Browser Group')
, ( 'Functional Owner')
) tbl ([RoleName])
)
,
user_list
AS
(
SELECT
usr.[UserID]
, usr.[UserName]
, [UserNameFormat] =
CASE
WHEN CHARINDEX('\', usr.[UserName]) > 0 THEN UPPER(SUBSTRING(usr.[UserName] ,CHARINDEX('\', usr.[UserName]) + 1, LEN(usr.[UserName])))
ELSE usr.[UserName]
END
FROM
dbo.[Users] AS usr
)
,
reporting_roles
AS
(
SELECT
cat.[Name]
, rol.[RoleName]
, usr.[UserNameFormat]
, [ReportingRoleName] = rpt.[RoleName]
FROM
dbo.[Catalog] AS cat
INNER JOIN catalog_type_description AS tpd ON cat.[Type] = tpd.[TypeID]
LEFT JOIN dbo.PolicyUserRole AS urol ON urol.[PolicyID] = cat.[PolicyID]
LEFT JOIN dbo.Roles AS rol ON urol.[RoleID] = rol.[RoleID]
LEFT JOIN reporting_role_names AS rpt ON rpt.[RoleName] = rol.[RoleName]
LEFT JOIN dbo.Policies AS pol ON urol.[PolicyID] = pol.[PolicyID]
LEFT JOIN user_list AS usr ON urol.[UserID] = usr.[UserID]
LEFT JOIN nonreport_folders AS nrf ON nrf.[FolderName] = cat.[Name]
WHERE
1=1
AND nrf.[FolderName] IS NULL
)
SELECT DISTINCT
[FolderName] = rpt.[Name]
, rpt.[RoleName]
, [UserNameFormat] = STUFF((SELECT '; ' + rol.[UserNameFormat] FROM reporting_roles rol WHERE rol.[RoleName] = rpt.[RoleName] AND rol.[Name] = rpt.[Name] FOR XML PATH('')),1,1,'')
, [ReportingRoleName]
FROM
reporting_roles AS rpt
-
用户需要“数据源”和“数据集”文件夹的读取权限。我会为此使用一个 AD 组,例如
Domain Users
。
参考资料:
https://code.msdn.microsoft.com/SQL-Server-Reporting-s-s-rS-50c4d06b
http://bhushan.extreme-advice.com/user-roles-and-permissions-in-s-s-rs/
https://www.mssqltips.com/sqlservertip/2793/sql-server-reporting-services-2012-permissions/
【讨论】:
以上是关于s-s-rS 权限的主要内容,如果未能解决你的问题,请参考以下文章
用于 SharePoint 2010 集成的 s-s-rS 2008 配置 - 权限问题