{"id":33,"date":"2015-08-16T11:17:00","date_gmt":"2015-08-16T18:17:00","guid":{"rendered":"\/lisa\/post\/2015\/08\/16\/Documentation-requires-rights-in-SSRS-but-who-has-them.aspx"},"modified":"2021-11-24T11:20:07","modified_gmt":"2021-11-24T19:20:07","slug":"documentation-requires-rights-in-ssrs-but-who-has-them","status":"publish","type":"post","link":"https:\/\/spacefold.com\/lisa\/2015\/08\/16\/documentation-requires-rights-in-ssrs-but-who-has-them\/","title":{"rendered":"Documentation requires rights in SSRS &#8211; but who has them?"},"content":{"rendered":"<p>Just as I found when I arrived in the school district, <span class=\"domLogoRef\"><a class=\"domLogoRef\" href=\"http:\/\/www.dominican.edu\/\">Dominican<\/a>&nbsp;<\/span>has made good use of SSRS self-service reporting before I got there. &nbsp;The difference is that, this time, instead of <a title=\"documenting SSRS in SRCS\" href=\"\/lisa\/2012\/07\/13\/xmlRSDocs-Dependency-Sleuthing-gets-an-(xslt)-upgrade\/\" target=\"_blank\" rel=\"noopener\">hundreds of hand-me-down reports<\/a>, I found over a thousand.<\/p>\n<p>Since a lot of my job is going to involve moving some databases around, I had to figure out where the dependencies on these databases might be buried &#8212; and that included embedded SQL queries in a thousand production RDLs.<\/p>\n<p>The first step was obviously to document them and figure out what reports used what databases and tables. &nbsp;I whipped out&nbsp; <a title=\"doc for xmlRSDocs!\" href=\"http:\/\/spacefold.com\/articles\/xmlrsdocs\/\" target=\"_blank\" rel=\"noopener\">xmlRSDocs<\/a>, which includes a handy-dandy report and some fancy parsing of RDL command texts to handle just this requirement, and got to work.<\/p>\n<p>Everything was just perfect, until I set up an SSIS package to update XMLRSDocs&#8217; cached RDL information regularly.<\/p>\n<h4>Whoops<\/h4>\n<p>While I could run the DTSX locally, with my DBA privileges, the identity that needed to run the package on a schedule couldn&#8217;t run it. &nbsp;Why not?<\/p>\n<p>XMLRSDocs trolls through all the SSRS artifacts recursively, using the SSRS Web Service API, reads in every RDL and parses it into a useable form for extrapolating various kinds of information. &nbsp;But the agent identity didn&#8217;t have rights to every single RDL; various SSRS folders have been assigned to various departments and access has been appropriately limited to them.<\/p>\n<p>You might ask, &#8220;why not just assign the agent identity to an appropriate domain group, so that it will have rights to all the RDLs?&#8221; &nbsp;Sigh. &nbsp;In the past, IT folks seem to have done this by using the built in Administrators group. &nbsp;There is no way I&#8217;m giving this identity membership in that group.<\/p>\n<p>Obviously, I&#8217;ll be getting such a group set up, but the task of finding out what folders, data sources, reports, and other SSRS catalog types (hold that thought) have been explicitly needed so that the group needs to be assigned privileges to them, still remains.<\/p>\n<p>How can we do it?<\/p>\n<p>It&#8217;s all very well to say &#8220;we&#8217;ll use XMLRSDocs to find out&#8221;, but that&#8217;s just it. &nbsp;XMLRSDocs can&#8217;t find out anything about items to which it doesn&#8217;t have permissions.<\/p>\n<p>In fact, I never worried much about how to document SSRS permissions before and never bothered to look at how I would do that.<\/p>\n<h4>We&#8217;re going low-level<\/h4>\n<p>It&#8217;s also all very well for the SSRS team &#8212; much as I respect them &#8212; to say that they don&#8217;t document the Reporting Services base tables. &nbsp;<a title=\"the authority of authorities on this stuff\" href=\"http:\/\/blogs.msdn.com\/b\/lukaszp\/\" target=\"_blank\" rel=\"noopener\">Somebody I respect incredibly highly<\/a>, in fact, has stated that we shouldn&#8217;t even think about catalog types from a database level; we should always be getting all this information from the SSRS web service API.<\/p>\n<p>That&#8217;s nice, but when the problem is that my identity doesn&#8217;t have rights to look at various objects I can&#8217;t find out about their permissions. &nbsp;I&#8217;m sure this is by design, but sometimes you&#8217;ve got to do what you&#8217;ve got to do.<\/p>\n<p>So I buckled down and took a look at some tables in the SSRS db that I&#8217;d never paid attention to, before.<\/p>\n<p>It didn&#8217;t turn out to be too bad &#8212; and actually you may find this useful, too &#8212; so, here you go. &nbsp;The relationships were not nearly as wacky and odd as they could have been.<\/p>\n<pre class=\"SQLCode\" style=\"font-size: 13px; font-weight: bold; font-family: monospace;\"><span class=\"SQLKeyword\" style=\"color: #0000aa;\">if<\/span> @HasPermissions <span class=\"SQLOperator\" style=\"color: #777777;\">=<\/span> 1\n   <span class=\"SQLKeyword\" style=\"color: #0000aa;\">or<\/span> <span class=\"SQLFunction\" style=\"color: #aa00aa;\">replace<\/span><span class=\"SQLOperator\" style=\"color: #777777;\">(<\/span><span class=\"SQLFunction\" style=\"color: #aa00aa;\">ltrim<\/span><span class=\"SQLOperator\" style=\"color: #777777;\">(<\/span><span class=\"SQLFunction\" style=\"color: #aa00aa;\">rtrim<\/span><span class=\"SQLOperator\" style=\"color: #777777;\">(<\/span>@UserName<span class=\"SQLOperator\" style=\"color: #777777;\">)<\/span><span class=\"SQLOperator\" style=\"color: #777777;\">)<\/span><span class=\"SQLOperator\" style=\"color: #777777;\">,<\/span> <span class=\"SQLString\" style=\"color: #aa0000;\">'(any)'<\/span><span class=\"SQLOperator\" style=\"color: #777777;\">,<\/span> <span class=\"SQLFunction\" style=\"color: #aa00aa;\">space<\/span><span class=\"SQLOperator\" style=\"color: #777777;\">(<\/span>0<span class=\"SQLOperator\" style=\"color: #777777;\">)<\/span><span class=\"SQLOperator\" style=\"color: #777777;\">)<\/span> <span class=\"SQLOperator\" style=\"color: #777777;\">=<\/span> <span class=\"SQLFunction\" style=\"color: #aa00aa;\">space<\/span><span class=\"SQLOperator\" style=\"color: #777777;\">(<\/span>0<span class=\"SQLOperator\" style=\"color: #777777;\">)<\/span><\/pre>\n<pre class=\"SQLCode\" style=\"font-size: 13px; font-weight: bold; font-family: monospace;\"><span class=\"SQLOperator\" style=\"color: #008000;\">-- we're going to look at the permissions that somebody, or everyone, has<\/span><\/pre>\n<div>\n<pre class=\"SQLCode\" style=\"font-size: 13px; font-weight: bold; font-family: monospace;\"><span class=\"SQLKeyword\" style=\"color: #0000aa;\">begin<\/span><\/pre>\n<\/div>\n<pre class=\"SQLCode\" style=\"font-size: 13px; font-weight: bold; font-family: monospace;\">   <span class=\"SQLKeyword\" style=\"color: #0000aa;\">select<\/span> <span class=\"SQLKeyword\" style=\"color: #0000aa;\">distinct<\/span> cat<span class=\"SQLOperator\" style=\"color: #777777;\">.<\/span>Path\n      <span class=\"SQLOperator\" style=\"color: #777777;\">,<\/span>cat<span class=\"SQLOperator\" style=\"color: #777777;\">.<\/span><span class=\"SQLKeyword\" style=\"color: #0000aa;\">name<\/span>\n      <span class=\"SQLOperator\" style=\"color: #777777;\">,<\/span>cat<span class=\"SQLOperator\" style=\"color: #777777;\">.<\/span>Type <span class=\"SQLKeyword\" style=\"color: #0000aa;\">as<\/span> Type\n      <span class=\"SQLOperator\" style=\"color: #777777;\">,<\/span>u<span class=\"SQLOperator\" style=\"color: #777777;\">.<\/span>UserName\n      <span class=\"SQLOperator\" style=\"color: #777777;\">,<\/span><span class=\"SQLKeyword\" style=\"color: #0000aa;\">case<\/span> \n         <span class=\"SQLKeyword\" style=\"color: #0000aa;\">when<\/span> @IncludeRoles <span class=\"SQLOperator\" style=\"color: #777777;\">=<\/span> 0\n            <span class=\"SQLKeyword\" style=\"color: #0000aa;\">then<\/span> <span class=\"SQLFunction\" style=\"color: #aa00aa;\">space<\/span><span class=\"SQLOperator\" style=\"color: #777777;\">(<\/span>0<span class=\"SQLOperator\" style=\"color: #777777;\">)<\/span>\n         <span class=\"SQLKeyword\" style=\"color: #0000aa;\">else<\/span> r<span class=\"SQLOperator\" style=\"color: #777777;\">.<\/span>RoleName\n         <span class=\"SQLKeyword\" style=\"color: #0000aa;\">end<\/span> <span class=\"SQLKeyword\" style=\"color: #0000aa;\">as<\/span> RoleName\n   <span class=\"SQLKeyword\" style=\"color: #0000aa;\">from<\/span> <span class=\"SQLKeyword\" style=\"color: #0000aa;\">catalog<\/span> <span class=\"SQLKeyword\" style=\"color: #0000aa;\">as<\/span> cat\n   <span class=\"SQLKeyword\" style=\"color: #0000aa;\">inner join<\/span> PolicyUserRole <span class=\"SQLKeyword\" style=\"color: #0000aa;\">as<\/span> pur <span class=\"SQLKeyword\" style=\"color: #0000aa;\">on<\/span> cat<span class=\"SQLOperator\" style=\"color: #777777;\">.<\/span>PolicyID <span class=\"SQLOperator\" style=\"color: #777777;\">=<\/span> pur<span class=\"SQLOperator\" style=\"color: #777777;\">.<\/span>PolicyID\n   <span class=\"SQLKeyword\" style=\"color: #0000aa;\">inner join<\/span> Users <span class=\"SQLKeyword\" style=\"color: #0000aa;\">as<\/span> u <span class=\"SQLKeyword\" style=\"color: #0000aa;\">on<\/span> pur<span class=\"SQLOperator\" style=\"color: #777777;\">.<\/span>UserID <span class=\"SQLOperator\" style=\"color: #777777;\">=<\/span> u<span class=\"SQLOperator\" style=\"color: #777777;\">.<\/span>UserID\n   <span class=\"SQLKeyword\" style=\"color: #0000aa;\">inner join<\/span> Roles <span class=\"SQLKeyword\" style=\"color: #0000aa;\">as<\/span> r <span class=\"SQLKeyword\" style=\"color: #0000aa;\">on<\/span> pur<span class=\"SQLOperator\" style=\"color: #777777;\">.<\/span>RoleID <span class=\"SQLOperator\" style=\"color: #777777;\">=<\/span> r<span class=\"SQLOperator\" style=\"color: #777777;\">.<\/span>RoleID\n   <span class=\"SQLKeyword\" style=\"color: #0000aa;\">where<\/span> <span class=\"SQLOperator\" style=\"color: #777777;\">(<\/span>\n         <span class=\"SQLOperator\" style=\"color: #777777;\">(<\/span>@UserName <span class=\"SQLOperator\" style=\"color: #777777;\">=<\/span> <span class=\"SQLString\" style=\"color: #aa0000;\">'(any)'<\/span><span class=\"SQLOperator\" style=\"color: #777777;\">)<\/span>\n         <span class=\"SQLKeyword\" style=\"color: #0000aa;\">or<\/span> <span class=\"SQLOperator\" style=\"color: #777777;\">(<\/span>u<span class=\"SQLOperator\" style=\"color: #777777;\">.<\/span>UserName <span class=\"SQLOperator\" style=\"color: #777777;\">like<\/span> <span class=\"SQLString\" style=\"color: #aa0000;\">'%'<\/span> <span class=\"SQLOperator\" style=\"color: #777777;\">+<\/span> <span class=\"SQLFunction\" style=\"color: #aa00aa;\">LTRIM<\/span><span class=\"SQLOperator\" style=\"color: #777777;\">(<\/span><span class=\"SQLFunction\" style=\"color: #aa00aa;\">RTRIM<\/span><span class=\"SQLOperator\" style=\"color: #777777;\">(<\/span>@UserName<span class=\"SQLOperator\" style=\"color: #777777;\">)<\/span><span class=\"SQLOperator\" style=\"color: #777777;\">)<\/span> <span class=\"SQLOperator\" style=\"color: #777777;\">+<\/span> <span class=\"SQLString\" style=\"color: #aa0000;\">'%'<\/span><span class=\"SQLOperator\" style=\"color: #777777;\">)<\/span>\n         <span class=\"SQLOperator\" style=\"color: #777777;\">)<\/span>\n      <span class=\"SQLKeyword\" style=\"color: #0000aa;\">and<\/span> <span class=\"SQLOperator\" style=\"color: #777777;\">(<\/span>cat<span class=\"SQLOperator\" style=\"color: #777777;\">.<\/span>Type <span class=\"SQLOperator\" style=\"color: #777777;\">in<\/span> <span class=\"SQLOperator\" style=\"color: #777777;\">(<\/span>@CatalogTypes<span class=\"SQLOperator\" style=\"color: #777777;\">)<\/span><span class=\"SQLOperator\" style=\"color: #777777;\">)<\/span>\n      <span class=\"SQLKeyword\" style=\"color: #0000aa;\">and<\/span> <span class=\"SQLOperator\" style=\"color: #777777;\">(<\/span>\n         <span class=\"SQLOperator\" style=\"color: #777777;\">(<\/span>@CatalogItemPath <span class=\"SQLOperator\" style=\"color: #777777;\">=<\/span> <span class=\"SQLString\" style=\"color: #aa0000;\">'(any)'<\/span><span class=\"SQLOperator\" style=\"color: #777777;\">)<\/span>\n         <span class=\"SQLKeyword\" style=\"color: #0000aa;\">or<\/span> <span class=\"SQLOperator\" style=\"color: #777777;\">(<\/span>cat<span class=\"SQLOperator\" style=\"color: #777777;\">.<\/span>Path <span class=\"SQLOperator\" style=\"color: #777777;\">+<\/span> cat<span class=\"SQLOperator\" style=\"color: #777777;\">.<\/span><span class=\"SQLKeyword\" style=\"color: #0000aa;\">name<\/span> <span class=\"SQLOperator\" style=\"color: #777777;\">like<\/span> <span class=\"SQLString\" style=\"color: #aa0000;\">'%'<\/span> <span class=\"SQLOperator\" style=\"color: #777777;\">+<\/span> <span class=\"SQLFunction\" style=\"color: #aa00aa;\">LTRIM<\/span><span class=\"SQLOperator\" style=\"color: #777777;\">(<\/span><span class=\"SQLFunction\" style=\"color: #aa00aa;\">RTRIM<\/span><span class=\"SQLOperator\" style=\"color: #777777;\">(<\/span>@CatalogItemPath<span class=\"SQLOperator\" style=\"color: #777777;\">)<\/span><span class=\"SQLOperator\" style=\"color: #777777;\">)<\/span> <span class=\"SQLOperator\" style=\"color: #777777;\">+<\/span> <span class=\"SQLString\" style=\"color: #aa0000;\">'%'<\/span><span class=\"SQLOperator\" style=\"color: #777777;\">)<\/span>\n         <span class=\"SQLOperator\" style=\"color: #777777;\">)<\/span>\n   <span class=\"SQLKeyword\" style=\"color: #0000aa;\">order<\/span> <span class=\"SQLKeyword\" style=\"color: #0000aa;\">by<\/span> cat<span class=\"SQLOperator\" style=\"color: #777777;\">.<\/span>Path\n      <span class=\"SQLOperator\" style=\"color: #777777;\">,<\/span>cat<span class=\"SQLOperator\" style=\"color: #777777;\">.<\/span><span class=\"SQLKeyword\" style=\"color: #0000aa;\">name<\/span>\n      <span class=\"SQLOperator\" style=\"color: #777777;\">,<\/span>RoleName\n      <span class=\"SQLOperator\" style=\"color: #777777;\">,<\/span>u<span class=\"SQLOperator\" style=\"color: #777777;\">.<\/span>UserName\n<span class=\"SQLKeyword\" style=\"color: #0000aa;\">end<\/span>\n<span class=\"SQLKeyword\" style=\"color: #0000aa;\">else<\/span>\n<span class=\"SQLKeyword\" style=\"color: #0000aa;\">begin<\/span><\/pre>\n<pre class=\"SQLCode\" style=\"font-size: 13px; font-weight: bold; font-family: monospace;\"><span class=\"SQLOperator\" style=\"color: #008000;\">-- we're going to look at the permissions that somebody lacks<\/span><\/pre>\n<pre class=\"SQLCode\" style=\"font-size: 13px; font-weight: bold; font-family: monospace;\">   <span class=\"SQLKeyword\" style=\"color: #0000aa;\">select<\/span> <span class=\"SQLKeyword\" style=\"color: #0000aa;\">distinct<\/span> cat<span class=\"SQLOperator\" style=\"color: #777777;\">.<\/span>Path\n      <span class=\"SQLOperator\" style=\"color: #777777;\">,<\/span>cat<span class=\"SQLOperator\" style=\"color: #777777;\">.<\/span><span class=\"SQLKeyword\" style=\"color: #0000aa;\">name<\/span>\n      <span class=\"SQLOperator\" style=\"color: #777777;\">,<\/span>cat<span class=\"SQLOperator\" style=\"color: #777777;\">.<\/span>Type <span class=\"SQLKeyword\" style=\"color: #0000aa;\">as<\/span> Type\n      <span class=\"SQLOperator\" style=\"color: #777777;\">,<\/span><span class=\"SQLKeyword\" style=\"color: #0000aa;\">null<\/span> <span class=\"SQLKeyword\" style=\"color: #0000aa;\">as<\/span> UserName\n      <span class=\"SQLOperator\" style=\"color: #777777;\">,<\/span><span class=\"SQLKeyword\" style=\"color: #0000aa;\">null<\/span> <span class=\"SQLKeyword\" style=\"color: #0000aa;\">as<\/span> RoleName\n   <span class=\"SQLKeyword\" style=\"color: #0000aa;\">from<\/span> <span class=\"SQLKeyword\" style=\"color: #0000aa;\">catalog<\/span> cat\n   <span class=\"SQLKeyword\" style=\"color: #0000aa;\">where<\/span> <span class=\"SQLOperator\" style=\"color: #777777;\">(<\/span>cat<span class=\"SQLOperator\" style=\"color: #777777;\">.<\/span>Type <span class=\"SQLOperator\" style=\"color: #777777;\">in<\/span> <span class=\"SQLOperator\" style=\"color: #777777;\">(<\/span>@CatalogTypes<span class=\"SQLOperator\" style=\"color: #777777;\">)<\/span><span class=\"SQLOperator\" style=\"color: #777777;\">)<\/span>\n      <span class=\"SQLKeyword\" style=\"color: #0000aa;\">and<\/span> <span class=\"SQLOperator\" style=\"color: #777777;\">(<\/span>\n         <span class=\"SQLOperator\" style=\"color: #777777;\">(<\/span>@CatalogItemPath <span class=\"SQLOperator\" style=\"color: #777777;\">=<\/span> <span class=\"SQLString\" style=\"color: #aa0000;\">'(any)'<\/span><span class=\"SQLOperator\" style=\"color: #777777;\">)<\/span>\n         <span class=\"SQLKeyword\" style=\"color: #0000aa;\">or<\/span> <span class=\"SQLOperator\" style=\"color: #777777;\">(<\/span>cat<span class=\"SQLOperator\" style=\"color: #777777;\">.<\/span>Path <span class=\"SQLOperator\" style=\"color: #777777;\">+<\/span> cat<span class=\"SQLOperator\" style=\"color: #777777;\">.<\/span><span class=\"SQLKeyword\" style=\"color: #0000aa;\">name<\/span> <span class=\"SQLOperator\" style=\"color: #777777;\">like<\/span> <span class=\"SQLString\" style=\"color: #aa0000;\">'%'<\/span> <span class=\"SQLOperator\" style=\"color: #777777;\">+<\/span> <span class=\"SQLFunction\" style=\"color: #aa00aa;\">LTRIM<\/span><span class=\"SQLOperator\" style=\"color: #777777;\">(<\/span><span class=\"SQLFunction\" style=\"color: #aa00aa;\">RTRIM<\/span><span class=\"SQLOperator\" style=\"color: #777777;\">(<\/span>@CatalogItemPath<span class=\"SQLOperator\" style=\"color: #777777;\">)<\/span><span class=\"SQLOperator\" style=\"color: #777777;\">)<\/span> <span class=\"SQLOperator\" style=\"color: #777777;\">+<\/span> <span class=\"SQLString\" style=\"color: #aa0000;\">'%'<\/span><span class=\"SQLOperator\" style=\"color: #777777;\">)<\/span>\n         <span class=\"SQLOperator\" style=\"color: #777777;\">)<\/span>\n      <span class=\"SQLKeyword\" style=\"color: #0000aa;\">and<\/span> cat<span class=\"SQLOperator\" style=\"color: #777777;\">.<\/span>ItemID <span class=\"SQLOperator\" style=\"color: #777777;\">not<\/span> <span class=\"SQLOperator\" style=\"color: #777777;\">in<\/span> <span class=\"SQLOperator\" style=\"color: #777777;\">(<\/span>\n         <span class=\"SQLKeyword\" style=\"color: #0000aa;\">select<\/span> cat<span class=\"SQLOperator\" style=\"color: #777777;\">.<\/span>ItemID\n         <span class=\"SQLKeyword\" style=\"color: #0000aa;\">from<\/span> <span class=\"SQLKeyword\" style=\"color: #0000aa;\">catalog<\/span> <span class=\"SQLKeyword\" style=\"color: #0000aa;\">as<\/span> cat\n         <span class=\"SQLKeyword\" style=\"color: #0000aa;\">inner join<\/span> PolicyUserRole <span class=\"SQLKeyword\" style=\"color: #0000aa;\">as<\/span> pur <span class=\"SQLKeyword\" style=\"color: #0000aa;\">on<\/span> cat<span class=\"SQLOperator\" style=\"color: #777777;\">.<\/span>PolicyID <span class=\"SQLOperator\" style=\"color: #777777;\">=<\/span> pur<span class=\"SQLOperator\" style=\"color: #777777;\">.<\/span>PolicyID\n         <span class=\"SQLKeyword\" style=\"color: #0000aa;\">inner join<\/span> Users <span class=\"SQLKeyword\" style=\"color: #0000aa;\">as<\/span> u <span class=\"SQLKeyword\" style=\"color: #0000aa;\">on<\/span> pur<span class=\"SQLOperator\" style=\"color: #777777;\">.<\/span>UserID <span class=\"SQLOperator\" style=\"color: #777777;\">=<\/span> u<span class=\"SQLOperator\" style=\"color: #777777;\">.<\/span>UserID\n         <span class=\"SQLKeyword\" style=\"color: #0000aa;\">where<\/span> <span class=\"SQLOperator\" style=\"color: #777777;\">(<\/span>u<span class=\"SQLOperator\" style=\"color: #777777;\">.<\/span>UserName <span class=\"SQLOperator\" style=\"color: #777777;\">like<\/span> <span class=\"SQLString\" style=\"color: #aa0000;\">'%'<\/span> <span class=\"SQLOperator\" style=\"color: #777777;\">+<\/span> <span class=\"SQLFunction\" style=\"color: #aa00aa;\">LTRIM<\/span><span class=\"SQLOperator\" style=\"color: #777777;\">(<\/span><span class=\"SQLFunction\" style=\"color: #aa00aa;\">RTRIM<\/span><span class=\"SQLOperator\" style=\"color: #777777;\">(<\/span>@UserName<span class=\"SQLOperator\" style=\"color: #777777;\">)<\/span><span class=\"SQLOperator\" style=\"color: #777777;\">)<\/span> <span class=\"SQLOperator\" style=\"color: #777777;\">+<\/span> <span class=\"SQLString\" style=\"color: #aa0000;\">'%'<\/span><span class=\"SQLOperator\" style=\"color: #777777;\">)<\/span>\n         <span class=\"SQLOperator\" style=\"color: #777777;\">)<\/span>\n   <span class=\"SQLKeyword\" style=\"color: #0000aa;\">order<\/span> <span class=\"SQLKeyword\" style=\"color: #0000aa;\">by<\/span> cat<span class=\"SQLOperator\" style=\"color: #777777;\">.<\/span>Path\n      <span class=\"SQLOperator\" style=\"color: #777777;\">,<\/span>cat<span class=\"SQLOperator\" style=\"color: #777777;\">.<\/span><span class=\"SQLKeyword\" style=\"color: #0000aa;\">name<\/span>&nbsp;<\/pre>\n<p><span style=\"color: #0000aa; font-family: monospace; font-size: 13px; font-weight: bold;\">end<\/span>&nbsp;<\/p>\n<h4>We&#8217;re going to run a report<\/h4>\n<p>Big surprise, it&#8217;s easier to analyze this stuff when you can see it, so I tarted up the query you see above with a couple of nice parameters. &nbsp;You can ignore them if you&#8217;re not interested in the same exact problem that I was, but basically I wanted to be able to see all objects to which somebody did, or did not, have access to, with the first usage being which objects the agent identity could not &#8220;see&#8221;.<\/p>\n<p><img decoding=\"async\" style=\"border: 1px solid black;\" src=\"\/lisa\/wp-non\/migrated\/2015\/8\/CatalogPermissions.png\" alt=\"SSRS Permissions report\" \/><\/p>\n<h4>What&#8217;s so important about catalog types?<\/h4>\n<p>I&#8217;m figuring I&#8217;m going to run this report, or these queries, first for folder type SSRS artifacts only. &nbsp;If we assign privileges to the new group just to those folders, chances are it will fix 90% of the objects of any type housed within them, which will inherit. &nbsp;Then I can run the report again for all the other types and quickly clean up the stragglers.<\/p>\n<p>So, FWIW, the report has a second dataset for the picklist, which I also use in the report body via the <a title=\"LSN on lookups\" href=\"\/lisa\/2015\/08\/02\/A-good-kick-in-the-pants-Lookup-functions-in-SSRS-Part-Deux\/\" target=\"_top\" rel=\"noopener\">Lookup function I talked about last time<\/a>:<\/p>\n<div class=\"code\">SELECT 1 AS Value, &#8216;Folder&#8217; AS Name UNION <br \/>SELECT 2 , &#8216;Report&#8217; UNION <br \/>SELECT 3 , &#8216;Resource&#8217; UNION <br \/>SELECT 4 , &#8216;Linked Report&#8217; UNION <br \/>SELECT 5 , &#8216;Data Source&#8217; UNION <br \/>SELECT 6 , &#8216;Report Model&#8217; UNION <br \/>SELECT 9 , &#8216;Report Part&#8217; UNION <br \/>SELECT 8 , &#8216;Shared Dataset&#8217; UNION <br \/>SELECT NULL , &#8216;System&#8217;<\/div>\n<h4>Open Sesame&#8230; &nbsp;<\/h4>\n<p>What do you reckon?<\/p>\n<p>I&#8217;m thinking <strong><em>that&#8217;s so crazy it just might work <\/em><\/strong>as <a title=\"Still around but now HBO-owned\" href=\"http:\/\/www.sesameworkshop.org\/\" target=\"_parent\" rel=\"noopener\">some other people I respect very highly<\/a>, and who are not on the reporting team, have always said.<\/p>\n<p>Hmm. &nbsp;I hope <a title=\"Sesame Workshop gets acquired\" href=\"http:\/\/www.sesameworkshop.org\/press-releases\/sesame-workshop-and-hbo-announce-partnership\/\" target=\"_blank\" rel=\"noopener\">HBO<\/a> doesn&#8217;t make any changes to that particular ethos.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Just as I found when I arrived in the school district, Dominican&nbsp;has made good use of SSRS self-service reporting before I got there. &nbsp;The difference is that, this time, instead of hundreds of hand-me-down reports, I found over a thousand. Since a lot of my job is going to involve moving some databases around, I<a class=\"more-link\" href=\"https:\/\/spacefold.com\/lisa\/2015\/08\/16\/documentation-requires-rights-in-ssrs-but-who-has-them\/\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,6],"tags":[],"class_list":["post-33","post","type-post","status-publish","format-standard","hentry","category-reporting","category-sql-server"],"_links":{"self":[{"href":"https:\/\/spacefold.com\/lisa\/wp-json\/wp\/v2\/posts\/33","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/spacefold.com\/lisa\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/spacefold.com\/lisa\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/spacefold.com\/lisa\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/spacefold.com\/lisa\/wp-json\/wp\/v2\/comments?post=33"}],"version-history":[{"count":1,"href":"https:\/\/spacefold.com\/lisa\/wp-json\/wp\/v2\/posts\/33\/revisions"}],"predecessor-version":[{"id":495,"href":"https:\/\/spacefold.com\/lisa\/wp-json\/wp\/v2\/posts\/33\/revisions\/495"}],"wp:attachment":[{"href":"https:\/\/spacefold.com\/lisa\/wp-json\/wp\/v2\/media?parent=33"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/spacefold.com\/lisa\/wp-json\/wp\/v2\/categories?post=33"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/spacefold.com\/lisa\/wp-json\/wp\/v2\/tags?post=33"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}