在我继续对 Catalog 表设置一个非常糟糕的检查约束之前,我想先征求一些更好的想法。
我想确保我们报表服务器上的所有共享数据源都部署到“/Data Sources”。时不时地,我们会错误地将一个部署到其他目录(特别是如果它是从 SSRS 2000 升级的报告,它不允许指定不同的数据源部署位置)。
如果归根结底,我可以在 Catalog(Type != 5 OR ParentID = 'GUID of /Data Sources directory'
或类似的)上设置一个丑陋的检查约束,但如果有更好的选择,我宁愿使用它。
为什么不更改权限以使人们无法将数据源部署到此文件夹以外的任何地方?
因此,从除
/Data Sources
. 这可以在根级别完成,然后设置自定义权限/Data Sources
如果您无法更改现有角色,则可能需要为此设置自定义角色。
我不认为 MS 实际上对底层 SSRS 数据库有任何保证,所以你实际上通过使用它来进入不受支持的领域。一般来说,最好在生产服务器上避免这种事情。
您可以通过 SSRS 公开的 Web 服务 API 以编程方式查询数据源和其他报表服务器元数据。API 将允许您遍历文件夹树,在它们不应该出现的地方寻找共享数据源。
寻找和异常报告可能是处理此问题的最佳方法,而不是试图从源头上阻止它。您还可以查询报告元数据以寻找引用了指定区域之外的来源的报告。这使您可以教育作者。
MS 提供了一个名为的实用程序
rs.exe
,让您可以编写脚本在 VB.NET 中执行此操作。更高版本也可能支持 C#,但我还没有用比 SSRS 2005 更新的任何东西来做到这一点。本质上,它使用一些样板文件在脚本的顶部和尾部,编译它然后执行它。rs.exe
可以在此处、此处和此处找到有关该实用程序和 SSRS Web 服务 API 的一些文档。只是抛出一个想法——在我们的环境中,报表开发人员可以访问源数据库,但报表用户不能。我们所有的数据源都部署到一个文件夹中,服务帐户用于对该数据源进行身份验证。
报表开发人员不知道服务帐户密码。
因此,通过此设置,如果报表开发人员在其他地方部署了数据源,则该报表将无法为报表使用者工作,只能为其他开发人员工作。(从技术上讲,他们必须始终使用“不覆盖数据源”,否则所有报告都会被弄乱,直到管理员使用服务帐户修改“新”数据源。)
希望这可以帮助!