Criar o RSExecRole

O Reporting Services utiliza uma função de base de dados predefinida denominada RSExecRole para conceder ao servidor de relatórios permissões na base de dados do servidor de relatórios. O papel RSExecRole é criado automaticamente com a base de dados do servidor de relatórios. Por norma, nunca o deve alterar nem atribuir a função a outros utilizadores. No entanto, quando move uma base de dados do servidor de relatórios para um novo ou diferente Motor de Base de Dados do SQL Server, tem de recriar a função nas bases de dados de sistema Master e MSDB.

Use as seguintes instruções para executar os seguintes passos:

  • Criar e provisionar o RSExecRole na base de dados do sistema Master.

  • Criar e provisionar o RSExecRole na base de dados do sistema MSDB.

Note

As instruções deste tópico destinam-se a utilizadores que não querem executar um script ou escrever código WMI para provisionar a base de dados do servidor de relatórios. Se gerir uma grande implementação e vai mover bases de dados rotineiramente, deve escrever um script para automatizar estes passos. Para mais informações, consulte o Fornecedor WMI de Serviços de Acesso a Relatórios.

Antes de começar

  • Faz backup das chaves de encriptação para que as possas restaurar depois de a base de dados ser movida. Este passo não afeta diretamente a sua capacidade de criar e provisionar o RSExecRole, mas deve ter uma cópia de segurança das chaves para verificar o seu trabalho. Para obter mais informações, consulte Fazer backup e restaurar chaves de criptografia do Reporting Services.

  • Verifica se estás ligado como uma conta de utilizador que tem permissões de sysadmin na instância do SQL Server.

  • Verifique se o serviço SQL Server Agent está instalado e a correr na instância da instância do Database Engine que pretende usar.

  • Anexe as bases de dados ReportServerTempDB e ReportServer. Não é obrigado a anexar as bases de dados para criar a função real, mas devem estar anexadas antes de poder testar o seu trabalho.

As instruções para criar manualmente o RSExecRole destinam-se a ser usadas no contexto da migração de uma instalação de um servidor de relatórios. Tarefas importantes como fazer backup e mover a base de dados do servidor de relatórios não são abordadas neste artigo, mas estão documentadas na documentação do Database Engine.

Criar RSExecRole em master

O Reporting Services utiliza procedimentos armazenados estendidos para o serviço SQL Server Agent para suportar operações agendadas. Os passos seguintes explicam como conceder permissões de execução para os procedimentos ao papel RSExecRole .

Crie o RSExecRole na base de dados do sistema mestre utilizando o Management Studio

  1. Inicie o SQL Server Management Studio e ligue-se à instância do Database Engine que aloja a base de dados do servidor de relatórios.

  2. Bases de Dados Abertas.

  3. Abra Bases de Dados do Sistema.

  4. Abra Master.

  5. Abra Segurança.

  6. Abra Funções.

  7. Clique com o botão direito do rato em Funções da Base de Dados e selecione Nova Função de Base de Dados. É apresentada a página Função da Base de Dados - Nova.

  8. No nome da função, introduz RSExecRole.

  9. Em Proprietário, introduza dbo.

  10. Selecione a página Securables.

  11. Selecione Pesquisar. Aparece a caixa de diálogo Adicionar Objetos . A opção Objetos Específicos está selecionada por defeito.

  12. Selecione OK. A caixa de diálogo Selecionar Objetos aparece.

  13. Selecione Tipos de Objetos.

  14. Selecione Procedimentos Armazenados Estendidos.

  15. Selecione OK.

  16. Selecione Procurar.

  17. Desça a lista e selecione os seguintes procedimentos:

    1. xp_sqlagent_enum_jobs

    2. xp_sqlagent_is_starting

    3. xp_sqlagent_notify

  18. Seleciona OK e depois seleciona OK novamente.

  19. Na linha Executar , na coluna Conceder , selecione a caixa de seleção.

  20. Repita para cada um dos procedimentos armazenados restantes. O RSExecRole deve receber permissões de execução para os três procedimentos armazenados.

  21. Selecione OK para concluir.

Captura de ecrã que mostra a página de Propriedades da Função da Base de Dados.

Criar RSExecRole no MSDB

O Reporting Services utiliza procedimentos armazenados para o serviço SQL Server Agent e recupera informações de trabalho das tabelas do sistema para suportar operações programadas. Os passos seguintes explicam como conceder permissões de execução para os procedimentos e permissões de seleção nas tabelas à função RSExecRole.

Criar RSExecRole na base de dados do sistema MSDB

  1. Repita passos semelhantes para conceder permissões a procedimentos armazenados e tabelas no MSDB. Para simplificar os passos, provisiona-se os procedimentos armazenados e as tabelas separadamente.

  2. Abra MSDB.

  3. Abra Segurança.

  4. Abra Funções.

  5. Clique com o botão direito do rato em Funções da Base de Dados e selecione Nova Função de Base de Dados. A página Geral aparece.

  6. No nome da função, introduz RSExecRole.

  7. Em Proprietário, introduza dbo.

  8. Selecione a página Securables.

  9. Selecione Pesquisar. Aparece a caixa de diálogo Adicionar Objetos . A opção Especificar Objetos está selecionada por defeito.

  10. Selecione OK.

  11. Selecione Tipos de Objetos.

  12. Selecionar Procedimentos Armazenados.

  13. Selecione OK.

  14. Selecione Procurar.

  15. Desça a lista de itens e selecione os seguintes procedimentos armazenados:

    1. sp_add_category

    2. sp_add_job

    3. sp_add_jobschedule

    4. sp_add_jobserver

    5. sp_add_jobstep

    6. sp_delete_job

    7. sp_help_category

    8. sp_help_job

    9. sp_help_jobschedule

    10. sp_verify_job_identifiers

  16. Selecione OK e depois selecione OK novamente.

  17. Selecione o primeiro procedimento armazenado: sp_add_category.

  18. Na linha Executar , na coluna Conceder , selecione a caixa de seleção.

  19. Repita para cada um dos procedimentos armazenados restantes. O RSExecRole deve receber permissões de execução para todos os 10 procedimentos armazenados.

  20. Ainda na página Securables, selecione novamente Pesquisar. Aparece a caixa de diálogo Adicionar Objetos . A opção Especificar Objetos está selecionada por defeito.

  21. Selecione OK.

  22. Selecione Tipos de Objetos.

  23. Selecionar tabelas.

  24. Selecione OK.

  25. Selecione Procurar.

  26. Desça a lista de itens e selecione as seguintes tabelas:

    1. Categorias de sistemas

    2. sysjobs

  27. Seleciona OK e depois seleciona OK novamente.

  28. Selecione a primeira tabela: syscategories.

  29. Na linha Selecionar, na coluna Permitir, selecione a caixa de verificação.

  30. Repita para a tabela sysjobs. O RSExecRole deve receber permissões Select para ambas as tabelas.

  31. Selecione OK para concluir.

Mover a base de dados do servidor de relatórios

Depois de criares os papéis, podes mover a base de dados do servidor de relatórios para uma nova instância do SQL Server. Para mais informações, consulte Mover as bases de dados do servidor de relatórios para outro computador.

Se estiver a atualizar o Database Engine para o SQL Server 2016 ou posterior, pode atualizá-lo antes ou depois de mover a base de dados.

A base de dados do servidor de relatórios é atualizada automaticamente quando o servidor de relatórios se liga a ela. Não são necessários passos específicos para atualizar a base de dados.

Restaure as chaves de encriptação e verifique o seu trabalho

Se anexou as bases de dados do servidor de relatórios, deverá agora conseguir completar os seguintes passos para verificar o seu trabalho.

Verificar a operacionalidade do servidor do relatório após uma transferência de base de dados

  1. Inicie a ferramenta Reporting Services Configuration e ligue-se ao servidor de relatórios.

  2. Selecionar Base de Dados.

  3. Selecionar Alterar Base de Dados.

  4. Selecione Escolher uma base de dados de servidor de relatórios existente.

  5. Introduza o nome do servidor do Database Engine. Se anexar as bases de dados do servidor de relatórios a uma instância nomeada, deve inserir o nome da instância neste formato: <nomedo> do servidor\<nomeda da instância>.

  6. Selecione Testar conexão. Deverá ver uma caixa de diálogo com a mensagem: "Teste de ligação bem-sucedido."

  7. Seleciona Ok para fechar a caixa de diálogo e depois seleciona Próximo.

  8. Na Base de Dados, selecione a base de dados do servidor de relatórios.

  9. Selecione Seguinte e complete o feiticeiro.

  10. Selecione Chaves de Encriptação.

  11. Selecione Restaurar.

  12. Selecione o ficheiro forte (.snk) que contém a cópia de backup da chave simétrica usada para desencriptar credenciais armazenadas e informações de ligação na base de dados do servidor de relatórios.

  13. Introduz a palavra-passe e selecione OK.

  14. Selecione URL do Portal Web.

  15. Selecione o link para abrir o portal web. Deves ver os itens do servidor de relatórios na base de dados do servidor de relatórios.

Crie o papel e as permissões RSExecRole usando T-SQL

O papel também pode ser criado, e as permissões aplicáveis concedidas, nas bases de dados do sistema utilizando o seguinte script T-SQL:

USE master;
GO
IF NOT EXISTS (SELECT 1 FROM sys.database_principals WHERE [type] = 'R' AND [name] = 'RSExecRole') BEGIN
    CREATE ROLE [RSExecRole];
END
GRANT EXECUTE ON dbo.xp_sqlagent_enum_jobs TO [RSExecRole];
GRANT EXECUTE ON dbo.xp_sqlagent_is_starting TO [RSExecRole];
GRANT EXECUTE ON dbo.xp_sqlagent_notify TO [RSExecRole];
GO
USE msdb;
GO
IF NOT EXISTS (SELECT 1 FROM sys.database_principals WHERE [type] = 'R' AND [name] = 'RSExecRole') BEGIN
    CREATE ROLE [RSExecRole];
END
GRANT EXECUTE ON dbo.sp_add_category TO [RSExecRole];
GRANT EXECUTE ON dbo.sp_add_job TO [RSExecRole];
GRANT EXECUTE ON dbo.sp_add_jobschedule TO [RSExecRole];
GRANT EXECUTE ON dbo.sp_add_jobserver TO [RSExecRole];
GRANT EXECUTE ON dbo.sp_add_jobstep TO [RSExecRole];
GRANT EXECUTE ON dbo.sp_delete_job TO [RSExecRole];
GRANT EXECUTE ON dbo.sp_help_category TO [RSExecRole];
GRANT EXECUTE ON dbo.sp_help_job TO [RSExecRole];
GRANT EXECUTE ON dbo.sp_help_jobschedule TO [RSExecRole];
GRANT EXECUTE ON dbo.sp_verify_job_identifiers TO [RSExecRole];
GRANT SELECT ON dbo.syscategories TO [RSExecRole];
GRANT SELECT ON dbo.sysjobs TO [RSExecRole];
GO