Целевая страница для сервера SSRS или html-страница с ошибкой - PullRequest
0 голосов
/ 06 декабря 2018

У нас есть сервер SSRS для предоставления отчетов в нашей организации десяткам тысяч пользователей.Пользователям предоставляется доступ к папкам на сервере группами AD.Распространенным сценарием является то, что пользователи будут запрашивать доступ к отчетам, и службе поддержки понадобится много времени, чтобы выяснить, о чем они говорят, и направить запрос обратно в нашу группу.

Мне нужно вызватьсервер SSRS для отображения страницы с инструкциями о том, как запросить доступ, когда пользователю отказано.Как мне это сделать?

Я много раз гуглял и не нашел ничего, кроме очень сложной дискуссии о брендинге, а что нет.Все, что мне нужно, это отображать пользовательскую страницу ошибок.Могу ли я сделать это сверху через IIS или что-то?Как люди создают «общедоступную» домашнюю страницу для своего сервера SSRS, чтобы пользователи, которые сталкиваются с ней по цепочкам электронной почты и из уст в уста, могли направляться к людям, которые управляют сервером, чтобы мы могли им помочь?

1 Ответ

0 голосов
/ 10 декабря 2018

Я начинаю с предоставления пользователям домена доступа к домашней странице сервера отчетов.

Затем я создаю новые роли в SQL Server Management studio, SSMS.После открытия SSMS нажмите «Подключиться» и выберите «Службы отчетов…»

login

Введите имя своего сервера и информацию для входа в систему, а затем нажмите «Подключиться».

connect

После подключения к серверу отчетов откройте папку безопасности, щелкните правой кнопкой мыши «Роли» и выберите «Новая роль ...»

Я создал 2 новые роли («Группа обозревателя», «Функциональный владелец») с тем же разрешением, что и «Браузер».

  • Functional Owner - кто утверждает доступ к папке отчета
  • Browser Group - у кого есть доступ к отчетам по папке

Затем в диспетчере отчетов щелкните стрелку вниз для папки и выберите «Безопасность»

Затем нажмите«Назначение новой роли»

Затем введите группу Active Directory или адрес электронной почты и проверьте созданную вами новую роль.

Затем можно запросить разрешения на сервере и показать их в отчете.(используйте служебную учетную запись для запуска отчета).Я развертываю отчет в корневом каталоге на сервере отчетов и называю его .How to get access to a report folder.Я включаю "."в начале имени отчета сортировать по началу.

Отчет SQL

;WITH 
nonreport_folders
AS
(
    SELECT tbl.* FROM (VALUES
      ( 'Images')
    , ( 'SharedDataSets')
    , ( 'Data Sources')
    , ( '')
    ) tbl ([FolderName]) 
)
, 
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]
    FROM 
        dbo.[Catalog] AS cat
        LEFT JOIN dbo.[PolicyUserRole] AS urol ON urol.[PolicyID] = cat.[PolicyID]
        LEFT JOIN dbo.[Roles] AS rol ON urol.[RoleID] = rol.[RoleID]
        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 cat.[Type] = 1
        AND nrf.[FolderName] IS NULL
)
SELECT *
FROM (
    SELECT DISTINCT
          [FolderName] = rpt.[Name]
        , [UserNameFormat] = STUFF((SELECT '; ' + rol.UserNameFormat FROM reporting_roles rol WHERE rol.[RoleName] = rpt.[RoleName] AND rol.[Name] = rpt.[Name] FOR XML PATH('')),1,1,'')
        , [RoleName]
    FROM 
        reporting_roles AS rpt
) as s
PIVOT
(
    MAX([UserNameFormat])
    FOR [RoleName] IN ([Browser Group], [Functional Owner])
)AS pvt ORDER BY 1

В отчете также можно создать гиперссылку для создания электронного письма для запроса доступа к каждой папке.,Вы можете включить сообщение для службы поддержки, для которой группа Active Directory нужна пользователю, на основе роли «Группа обозревателя» и cc «Функциональный владелец» для утверждения.Я бы также использовал параметр для электронной почты службы поддержки.

Пример отчета

report

Отчет XML

<?xml version="1.0" encoding="utf-8"?>
<Report MustUnderstand="df" xmlns="http://schemas.microsoft.com/sqlserver/reporting/2016/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner" xmlns:df="http://schemas.microsoft.com/sqlserver/reporting/2016/01/reportdefinition/defaultfontfamily">
  <Description>A list of report folders with permission groups and function owners</Description>
  <df:DefaultFontFamily>Segoe UI</df:DefaultFontFamily>
  <Author>Anthony Duguid</Author>
  <AutoRefresh>0</AutoRefresh>
  <DataSources>
    <DataSource Name="ReportServer">
      <ConnectionProperties>
        <DataProvider>SQL</DataProvider>
        <ConnectString>Data Source=YourServerName;Initial Catalog=ReportServer</ConnectString>
        <IntegratedSecurity>true</IntegratedSecurity>
      </ConnectionProperties>
      <rd:SecurityType>Integrated</rd:SecurityType>
      <rd:DataSourceID>2ff706bc-1b72-4676-bb2a-10cc2737189c</rd:DataSourceID>
    </DataSource>
  </DataSources>
  <DataSets>
    <DataSet Name="FolderPermissions">
      <Query>
        <DataSourceName>ReportServer</DataSourceName>
        <CommandText>;WITH 
nonreport_folders
AS
(
    SELECT tbl.* FROM (VALUES
      ( 'Images')
    , ( 'SharedDataSets')
    , ( 'Data Sources')
    , ( '')
    ) tbl ([FolderName]) 
)
, 
user_list
AS
(
    SELECT 
          usr.[UserID]
        , usr.[UserName]
        , [UserNameFormat] = 
            CASE 
                WHEN CHARINDEX('\', usr.[UserName]) &gt; 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]
    FROM 
        dbo.[Catalog] AS cat
        LEFT JOIN dbo.[PolicyUserRole] AS urol ON urol.[PolicyID] = cat.[PolicyID]
        LEFT JOIN dbo.[Roles] AS rol ON urol.[RoleID] = rol.[RoleID]
        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 cat.[Type] = 1
        AND nrf.[FolderName] IS NULL
)
SELECT *
FROM (
    SELECT DISTINCT
          [FolderName] = rpt.[Name]
        , [UserNameFormat] = STUFF((SELECT '; ' + rol.UserNameFormat FROM reporting_roles rol WHERE rol.[RoleName] = rpt.[RoleName] AND rol.[Name] = rpt.[Name] FOR XML PATH('')),1,1,'')
        , [RoleName]
    FROM 
        reporting_roles AS rpt
) as s
PIVOT
(
    MAX([UserNameFormat])
    FOR [RoleName] IN ([Browser Group], [Functional Owner])
)AS pvt ORDER BY 1</CommandText>
      </Query>
      <Fields>
        <Field Name="FolderName">
          <DataField>FolderName</DataField>
          <rd:TypeName>System.String</rd:TypeName>
        </Field>
        <Field Name="Browser_Group">
          <DataField>Browser Group</DataField>
          <rd:TypeName>System.String</rd:TypeName>
        </Field>
        <Field Name="Functional_Owner">
          <DataField>Functional Owner</DataField>
          <rd:TypeName>System.String</rd:TypeName>
        </Field>
      </Fields>
    </DataSet>
  </DataSets>
  <ReportSections>
    <ReportSection>
      <Body>
        <ReportItems>
          <Tablix Name="Tablix1">
            <TablixBody>
              <TablixColumns>
                <TablixColumn>
                  <Width>0.6cm</Width>
                </TablixColumn>
                <TablixColumn>
                  <Width>5.5cm</Width>
                </TablixColumn>
                <TablixColumn>
                  <Width>7.39208cm</Width>
                </TablixColumn>
                <TablixColumn>
                  <Width>6.49521cm</Width>
                </TablixColumn>
              </TablixColumns>
              <TablixRows>
                <TablixRow>
                  <Height>0.6cm</Height>
                  <TablixCells>
                    <TablixCell>
                      <CellContents>
                        <Textbox Name="Textbox24">
                          <CanGrow>true</CanGrow>
                          <KeepTogether>true</KeepTogether>
                          <Paragraphs>
                            <Paragraph>
                              <TextRuns>
                                <TextRun>
                                  <Value />
                                  <Style>
                                    <FontFamily>Arial</FontFamily>
                                  </Style>
                                </TextRun>
                              </TextRuns>
                              <Style />
                            </Paragraph>
                          </Paragraphs>
                          <rd:DefaultName>Textbox23</rd:DefaultName>
                          <Style>
                            <Border>
                              <Color>LightGrey</Color>
                              <Style>Solid</Style>
                            </Border>
                            <PaddingLeft>2pt</PaddingLeft>
                            <PaddingRight>2pt</PaddingRight>
                            <PaddingTop>2pt</PaddingTop>
                            <PaddingBottom>2pt</PaddingBottom>
                          </Style>
                        </Textbox>
                      </CellContents>
                    </TablixCell>
                    <TablixCell>
                      <CellContents>
                        <Textbox Name="Textbox25">
                          <CanGrow>true</CanGrow>
                          <KeepTogether>true</KeepTogether>
                          <Paragraphs>
                            <Paragraph>
                              <TextRuns>
                                <TextRun>
                                  <Value>Folder Name</Value>
                                  <Style>
                                    <FontFamily>Calibri</FontFamily>
                                  </Style>
                                </TextRun>
                              </TextRuns>
                              <Style />
                            </Paragraph>
                          </Paragraphs>
                          <rd:DefaultName>Textbox22</rd:DefaultName>
                          <Style>
                            <Border>
                              <Color>LightGrey</Color>
                              <Style>Solid</Style>
                            </Border>
                            <PaddingLeft>2pt</PaddingLeft>
                            <PaddingRight>2pt</PaddingRight>
                            <PaddingTop>2pt</PaddingTop>
                            <PaddingBottom>2pt</PaddingBottom>
                          </Style>
                        </Textbox>
                      </CellContents>
                    </TablixCell>
                    <TablixCell>
                      <CellContents>
                        <Textbox Name="RoleName2">
                          <CanGrow>true</CanGrow>
                          <KeepTogether>true</KeepTogether>
                          <Paragraphs>
                            <Paragraph>
                              <TextRuns>
                                <TextRun>
                                  <Value>Group</Value>
                                  <Style>
                                    <FontFamily>Calibri</FontFamily>
                                  </Style>
                                </TextRun>
                              </TextRuns>
                              <Style />
                            </Paragraph>
                          </Paragraphs>
                          <rd:DefaultName>RoleName</rd:DefaultName>
                          <Style>
                            <Border>
                              <Color>LightGrey</Color>
                              <Style>Solid</Style>
                            </Border>
                            <PaddingLeft>2pt</PaddingLeft>
                            <PaddingRight>2pt</PaddingRight>
                            <PaddingTop>2pt</PaddingTop>
                            <PaddingBottom>2pt</PaddingBottom>
                          </Style>
                        </Textbox>
                      </CellContents>
                    </TablixCell>
                    <TablixCell>
                      <CellContents>
                        <Textbox Name="Textbox12">
                          <CanGrow>true</CanGrow>
                          <KeepTogether>true</KeepTogether>
                          <Paragraphs>
                            <Paragraph>
                              <TextRuns>
                                <TextRun>
                                  <Value>Owner</Value>
                                  <Style>
                                    <FontFamily>Calibri</FontFamily>
                                  </Style>
                                </TextRun>
                              </TextRuns>
                              <Style />
                            </Paragraph>
                          </Paragraphs>
                          <rd:DefaultName>Textbox12</rd:DefaultName>
                          <Style>
                            <Border>
                              <Color>LightGrey</Color>
                              <Style>Solid</Style>
                            </Border>
                            <PaddingLeft>2pt</PaddingLeft>
                            <PaddingRight>2pt</PaddingRight>
                            <PaddingTop>2pt</PaddingTop>
                            <PaddingBottom>2pt</PaddingBottom>
                          </Style>
                        </Textbox>
                      </CellContents>
                    </TablixCell>
                  </TablixCells>
                </TablixRow>
                <TablixRow>
                  <Height>0.6cm</Height>
                  <TablixCells>
                    <TablixCell>
                      <CellContents>
                        <Image Name="image10">
                          <Source>Embedded</Source>
                          <Value>email</Value>
                          <Sizing>Clip</Sizing>
                          <ActionInfo>
                            <Actions>
                              <Action>
                                <Hyperlink>="mailto:" &amp; Parameters!HelpDeskEmail.Value &amp; "?subject=Access to report folder: " &amp; Fields!FolderName.Value &amp; "&amp;cc=" &amp; Fields!Functional_Owner.Value &amp; "&amp;body=I would like access to the report folder. Please add me to the following Active Directory group: " &amp; Fields!Browser_Group.Value</Hyperlink>
                              </Action>
                            </Actions>
                          </ActionInfo>
                          <ToolTip>request access to report folder</ToolTip>
                          <Style>
                            <Border>
                              <Style>None</Style>
                              <Width>0.5pt</Width>
                            </Border>
                            <PaddingLeft>1.5pt</PaddingLeft>
                            <PaddingTop>1.5pt</PaddingTop>
                          </Style>
                        </Image>
                      </CellContents>
                    </TablixCell>
                    <TablixCell>
                      <CellContents>
                        <Textbox Name="FolderName2">
                          <CanGrow>true</CanGrow>
                          <KeepTogether>true</KeepTogether>
                          <Paragraphs>
                            <Paragraph>
                              <TextRuns>
                                <TextRun>
                                  <Value>=Fields!FolderName.Value</Value>
                                  <Style>
                                    <FontFamily>Calibri</FontFamily>
                                  </Style>
                                </TextRun>
                              </TextRuns>
                              <Style />
                            </Paragraph>
                          </Paragraphs>
                          <rd:DefaultName>FolderName</rd:DefaultName>
                          <Style>
                            <Border>
                              <Color>LightGrey</Color>
                              <Style>Solid</Style>
                            </Border>
                            <PaddingLeft>2pt</PaddingLeft>
                            <PaddingRight>2pt</PaddingRight>
                            <PaddingTop>2pt</PaddingTop>
                            <PaddingBottom>2pt</PaddingBottom>
                          </Style>
                        </Textbox>
                      </CellContents>
                    </TablixCell>
                    <TablixCell>
                      <CellContents>
                        <Textbox Name="txtRoleName2">
                          <KeepTogether>true</KeepTogether>
                          <Paragraphs>
                            <Paragraph>
                              <TextRuns>
                                <TextRun>
                                  <Value>=Fields!Browser_Group.Value</Value>
                                  <Style>
                                    <FontFamily>Calibri</FontFamily>
                                  </Style>
                                </TextRun>
                              </TextRuns>
                              <Style />
                            </Paragraph>
                          </Paragraphs>
                          <Style>
                            <Border>
                              <Color>LightGrey</Color>
                              <Style>Solid</Style>
                            </Border>
                            <PaddingLeft>2pt</PaddingLeft>
                            <PaddingRight>2pt</PaddingRight>
                            <PaddingTop>2pt</PaddingTop>
                            <PaddingBottom>2pt</PaddingBottom>
                          </Style>
                        </Textbox>
                      </CellContents>
                    </TablixCell>
                    <TablixCell>
                      <CellContents>
                        <Textbox Name="Functional_Owner">
                          <CanGrow>true</CanGrow>
                          <KeepTogether>true</KeepTogether>
                          <Paragraphs>
                            <Paragraph>
                              <TextRuns>
                                <TextRun>
                                  <Value>=Fields!Functional_Owner.Value</Value>
                                  <Style>
                                    <FontFamily>Calibri</FontFamily>
                                  </Style>
                                </TextRun>
                              </TextRuns>
                              <Style />
                            </Paragraph>
                          </Paragraphs>
                          <rd:DefaultName>Functional_Owner</rd:DefaultName>
                          <Style>
                            <Border>
                              <Color>LightGrey</Color>
                              <Style>Solid</Style>
                            </Border>
                            <PaddingLeft>2pt</PaddingLeft>
                            <PaddingRight>2pt</PaddingRight>
                            <PaddingTop>2pt</PaddingTop>
                            <PaddingBottom>2pt</PaddingBottom>
                          </Style>
                        </Textbox>
                      </CellContents>
                    </TablixCell>
                  </TablixCells>
                </TablixRow>
              </TablixRows>
            </TablixBody>
            <TablixColumnHierarchy>
              <TablixMembers>
                <TablixMember />
                <TablixMember />
                <TablixMember />
                <TablixMember />
              </TablixMembers>
            </TablixColumnHierarchy>
            <TablixRowHierarchy>
              <TablixMembers>
                <TablixMember>
                  <KeepWithGroup>After</KeepWithGroup>
                </TablixMember>
                <TablixMember>
                  <Group Name="Details" />
                </TablixMember>
              </TablixMembers>
            </TablixRowHierarchy>
            <DataSetName>FolderPermissions</DataSetName>
            <Height>1.2cm</Height>
            <Width>19.98729cm</Width>
            <Style>
              <Border>
                <Style>None</Style>
              </Border>
            </Style>
          </Tablix>
        </ReportItems>
        <Height>0.47244in</Height>
        <Style />
      </Body>
      <Width>7.86901in</Width>
      <Page>
        <PageHeight>29.7cm</PageHeight>
        <PageWidth>21cm</PageWidth>
        <LeftMargin>2cm</LeftMargin>
        <RightMargin>2cm</RightMargin>
        <TopMargin>2cm</TopMargin>
        <BottomMargin>2cm</BottomMargin>
        <ColumnSpacing>0.13cm</ColumnSpacing>
        <Style />
      </Page>
    </ReportSection>
  </ReportSections>
  <ReportParameters>
    <ReportParameter Name="HelpDeskEmail">
      <DataType>String</DataType>
      <DefaultValue>
        <Values>
          <Value>yourhelpdesk@yourcompany.com</Value>
        </Values>
      </DefaultValue>
      <Prompt>HelpDeskEmail</Prompt>
      <Hidden>true</Hidden>
    </ReportParameter>
    <ReportParameter Name="FunctionalOwner">
      <DataType>String</DataType>
      <DefaultValue>
        <Values>
          <Value>Functional Owner</Value>
        </Values>
      </DefaultValue>
      <Prompt>FunctionalOwner</Prompt>
      <Hidden>true</Hidden>
      <MultiValue>true</MultiValue>
    </ReportParameter>
    <ReportParameter Name="BrowserGroup">
      <DataType>String</DataType>
      <DefaultValue>
        <Values>
          <Value>Browser Group</Value>
        </Values>
      </DefaultValue>
      <Prompt>BrowserGroup</Prompt>
      <Hidden>true</Hidden>
      <MultiValue>true</MultiValue>
    </ReportParameter>
  </ReportParameters>
  <ReportParametersLayout>
    <GridLayoutDefinition>
      <NumberOfColumns>1</NumberOfColumns>
      <NumberOfRows>3</NumberOfRows>
      <CellDefinitions>
        <CellDefinition>
          <ColumnIndex>0</ColumnIndex>
          <RowIndex>0</RowIndex>
          <ParameterName>HelpDeskEmail</ParameterName>
        </CellDefinition>
        <CellDefinition>
          <ColumnIndex>0</ColumnIndex>
          <RowIndex>1</RowIndex>
          <ParameterName>FunctionalOwner</ParameterName>
        </CellDefinition>
        <CellDefinition>
          <ColumnIndex>0</ColumnIndex>
          <RowIndex>2</RowIndex>
          <ParameterName>BrowserGroup</ParameterName>
        </CellDefinition>
      </CellDefinitions>
    </GridLayoutDefinition>
  </ReportParametersLayout>
  <EmbeddedImages>
    <EmbeddedImage Name="email">
      <MIMEType>image/png</MIMEType>
      <ImageData>iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAITSURBVBgZpcHLThNhGIDh9/vn7/RApwc5VCmFWBPi1mvwAlx7BW69Afeu3bozcSE7E02ILjCRhRrds8AEbKVS2gIdSjvTmf+TYqLu+zyiqszDMCf75PnnnVwhuNcLpwsXk8Q4BYeSOsWpkqrinJI6JXVK6lSRdDq9PO+19vb37XK13Hj0YLMUTVVyWY//Cf8IVwQEGEeJN47S1YdPo4npDpNmnDh5udOh1YsZRcph39EaONpnjs65oxsqvZEyTaHdj3n2psPpKDLBcuOOGUWpZDOG+q0S7751ObuYUisJGQ98T/Ct4Fuo5IX+MGZr95jKjRKLlSxXxFxOEmaaN4us1Upsf+1yGk5ZKhp8C74H5ZwwCGO2drssLZZo1ouIcs2MJikz1oPmapHlaoFXH1oMwphyTghyQj+MefG+RblcoLlaJG/5y4zGCTMikEwTctaxXq/w9kuXdm9Cuzfh9acujXqFwE8xmuBb/hCwl1GKAnGccDwIadQCfD9DZ5Dj494QA2w2qtQW84wmMZ1eyFI1QBVQwV5GiaZOpdsPaSwH5HMZULi9UmB9pYAAouBQbMHHrgQcnQwZV/KgTu1o8PMgipONu2t5KeaNiEkxgAiICDMCCFeEK5aNauAOfoXx8KR9ZOOLk8P7j7er2WBhwWY9sdbDeIJnwBjBWBBAhGsCmiZxPD4/7Z98b/0QVWUehjkZ5vQb/Un5e/DIsVsAAAAASUVORK5CYII=</ImageData>
    </EmbeddedImage>
  </EmbeddedImages>
  <rd:ReportUnitType>Cm</rd:ReportUnitType>
  <rd:ReportID>73bf78ec-5d72-4bb2-bdf4-804444e517c6</rd:ReportID>
</Report>

Пример выражения

="mailto:" & Parameters!HelpDeskEmail.Value & "?subject=Access to report folder: " & Fields!FolderName.Value & 
"&cc=" & Fields!Functional_Owner.Value & 
"&body=I would like access to the report folder. Please add me to the following Active Directory group: " & Fields!Browser_Group.Value

image properties

Пример электронной почты

email


Вот несколько примеров SSRS, которые я использую для запроса сервера отчетов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...