Conceder permissões para executar um trabalho do servidor SQL

22

Tenho um trabalho no meu servidor MSSQL 2005 que desejo permitir que qualquer usuário do banco de dados seja executado.

Não estou preocupado com segurança, pois a entrada para o trabalho real do trabalho vem de uma tabela de banco de dados. Apenas executar o trabalho, sem adicionar registros a essa tabela, não fará nada.

Não consigo encontrar como conceder permissões públicas ao trabalho.

Há alguma maneira de fazer isso? A única coisa em que posso pensar neste momento é ter o trabalho constantemente em execução (ou dentro de um cronograma), mas como ele só precisa realizar algum trabalho real raramente (talvez uma vez a cada poucos meses) e eu quero que o trabalho seja feito assim que existir, isso não parece ser uma solução ideal.

Shahar Mosek
fonte

Respostas:

20

Você pode criar um procedimento armazenado que executa o trabalho. Você pode usar with execute as ownerpara executar o procedimento armazenado como proprietário do banco de dados. Dessa forma, os próprios usuários não precisam de permissão sp_start_job.

create procedure dbo.DoYourJob
with execute as owner
as
exec sp_start_job @job_name = 'YourJob'

Conceda direitos de execução DoYourJobpara permitir que as pessoas iniciem o trabalho.

Obviamente, você também pode colocar o conteúdo do trabalho em um procedimento e conceder direitos para executá-lo. Isso permitiria mais interação, como a exibição de um texto de resultado.

Andomar
fonte
Isso não funciona. O usuário não privilegiado pode executar o procedimento, mas o procedimento não pode executar sp_start_job, porque o usuário não tem permissões para executá-lo. Não quero que o conteúdo esteja em um procedimento, porque não quero que o chamador precise esperar o término do trabalho.
@ shaharmo: Você pode executar o procedimento armazenado como proprietário do banco de dados,
editarei
Ainda não funciona. Eu recebo o mesmo erro. Tentei criar o DoYourJob no banco de dados msdb, bem como no meu banco de dados, com os mesmos resultados.
1
@shaharmo: Estranho, gostaria de saber quem é o proprietário do banco de dados. Você também pode usar with execute as 'loginname', isso funciona?
22430 Andomar
3

Basicamente, são necessárias sp_start_jobpermissões (consulte a seção de permissões).

As funções são descritas em " Funções de banco de dados fixas do SQL Server Agent " (vinculadas acima)

Editar, janeiro de 2012

Após o voto anônimo 2 anos depois, eu respondi ...

Leia a pergunta. Diz

Eu quero permitir que qualquer usuário do banco de dados seja executado

então

Eu não estou preocupado com segurança

e também

Não consigo encontrar como conceder permissões públicas para o trabalho

Portanto, os comentários do OP abaixo contradizem a pergunta

gbn
fonte
1
Isso não dará a todos os usuários permissões para executar todos os trabalhos? Quero que eles tenham permissão para executar apenas um trabalho específico.
1
Qual é o que você pediu ... "conceder permissões públicas para o trabalho"
gbn
1

Isso permitirá que um usuário específico (usuário1) execute qualquer trabalho do Sql Agent.

Os membros de SQLAgentUserRole e SQLAgentReaderRole podem iniciar apenas tarefas de sua propriedade. Os membros do SQLAgentOperatorRole podem iniciar todos os trabalhos locais, incluindo aqueles pertencentes a outros usuários

USE [msdb] GO CREATE USER [user1] FOR LOGIN [user1] GO USE [msdb] GO ALTER ROLE [SQLAgentOperatorRole] ADD MEMBER [user1] GO

bebado
fonte
0

Tenho uma necessidade semelhante de conceder permissão para o meu operador executar manualmente as tarefas do SQL Server Agent. Segui esta postagem Funções de banco de dados fixas do SQL Server Agent para conceder a função SQLAgentOperatorRole.

Espero que isso ajude a resolver seu caso.

Vu Doan
fonte
Você poderia colocar os detalhes do que fez? As respostas apenas para links são "desaprovadas" - link rot & c.
Vérace 15/01