Como executar msdb.dbo.sp_start_job a partir de um procedimento armazenado no banco de dados do usuário no sql server 2005

4

Estou tentando executar um msdb.dbo.sp_start_Job de MyDB.dbo.MyStoredProc para executar MyJob

1) Sei que se der ao usuário uma função SqlAgentUser, ele poderá executar os trabalhos que possui (MAS ESTE É O QUE OBSERVA: O USUÁRIO FOI POSSÍVEL INICIAR / PARAR / REINICIAR O AGENTE SQL SO I NÃO QUISER IR ESTA VIAGEM) - Deixe-me saber se estou errado, mas não entendo por que um usuário tão privilegiado seria capaz de iniciar / interromper agentes.

2) Eu sei que se eu der permissões de execução na execução do usuário para msdb.dbo.Sp_Start_job e Ativar encadeamento de propriedade ou ativar Confiável no banco de dados do usuário que funcionaria (MAS EU NÃO QUERO HABILITAR A CADEIA DE PROPRIETÁRIAS OU A CONFIANÇA NO BANCO DE DADOS DO USUÁRIO)

3) Eu isso isso pode ser feito por assinatura de código

Banco de dados do usuário i) crie um proc armazenado MyDB.dbo.MyStoredProc ii) Crie uma certificae job_exec iii) assina MyDB.dbo.MyStoredProc com certificado job_exec iv) certificado de exportação

msdb i) Certificado de Importação ii) criar um usuário derivado deste certificado iii) conceder autenticar para este usuário derivado iv) conceder execução em msdb.dbo.sp_start_job para o usuário derivado v) concede a execução em msdb.dbo.sp_start_job ao usuário que está executando o MyDB.dbo.MyStoredProc

mas eu tentei e não funcionou para mim -Eu não sei qual parte eu estou ausente ou fazendo errado

então, por favor, me forneça um exemplo simples (com scripts) para executar msdb.dbo.sp_start_job a partir do usuário armazenado prod MyDB.dbo.MyStoredProc usando assinatura de código

Muitos e muitos agradecimentos antecipados

Obrigado Ram

    
por Nick Kavadias 20.11.2009 / 13:28

3 respostas

1

1) Eu acho que o SSMS está fazendo algo que pode ser considerado um 'recurso'. O que você observa é que o SSMS permite reiniciar o SQL Server Agent com as permissões do Windows, independentemente das permissões que você tenha no SQL Server, ou quais permissões você registrou no servidor no Object Explorer, por exemplo. Eu criei uma conta sql com apenas a função SqlAgentUser em msdb & foi capaz de reiniciar o Agente, embora eu tenha iniciado o SSMS como administrador local.

Eu tentei fazer a mesma coisa novamente, embora eu tenha criado uma conta de usuário do windows local & iniciou o SSMS usando Run As .. como esse usuário não administrativo local. O que eu descobri foi que eu não conseguia parar o agente, na verdade, o SSMS caiu quando eu tentei (oh querida!), Mas o agente continuou correndo. ... Portanto, a moral da história é: certifique-se de que os usuários que você deseja apenas executar trabalhos específicos não sejam administradores locais em sua caixa do SQL Server. Se eles estiverem, eles podem reiniciar o agente e o SQL Server para essa questão! então pare de se estressar !!

2) Você pode fazer algo como criar seu próprio sproc que chama msdb.dbo.sp_start_job @yourjobid e usar EXECUTE AS ou setuser dentro desse sproc. Em seguida, conceda a sua permissão de usuário apenas a esse sproc.

3) Você está louco?!?!?!

    
por 20.11.2009 / 14:56
0

A assinatura de código é a maneira correta de fazer isso. A única coisa que vejo faltando na sua descrição é que MyDB.dbo.MyStoredProc deve ter uma cláusula EXECUTE AS (mesmo se EXECUTE AS CALLER), caso contrário, a assinatura do código não está tendo efeito.

    
por 25.11.2009 / 19:10
0

Jonathan Kehayias publicou uma solução que parece uma solução perfeita para você.

Dê uma olhada nisso para ver se isso é uma boa opção para você. link

    
por 26.12.2009 / 20:21