Concedere le autorizzazioni per eseguire un processo del server SQL


22

Ho un lavoro sul mio server MSSQL 2005, che voglio consentire a qualsiasi utente del database di eseguire.

Non sono preoccupato per la sicurezza, poiché l'input per il lavoro effettivo del lavoro proviene da una tabella del database. Basta eseguire il lavoro, senza aggiungere record a quella tabella non farà nulla.

Non riesco proprio a trovare come concedere autorizzazioni pubbliche al lavoro.

C'è un modo per fare questo? L'unica cosa che mi viene in mente a questo punto è di avere il lavoro costantemente in esecuzione (o su una pianificazione), ma dal momento che deve solo fare qualsiasi lavoro reale raramente (forse una volta ogni pochi mesi) e voglio che il lavoro sia fatto non appena esiste, questa non sembra essere una soluzione ottimale.

Risposte:


20

È possibile creare una procedura memorizzata che esegue il processo. È possibile utilizzare with execute as ownerper eseguire la procedura memorizzata come proprietario del database. In questo modo, gli utenti stessi non hanno bisogno di permessi sp_start_job.

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

Concedi i diritti di esecuzione DoYourJobper consentire alle persone di iniziare il lavoro.

Naturalmente, puoi anche inserire i contenuti del lavoro in una procedura e concedere i diritti per eseguirlo. Ciò consentirebbe una maggiore interazione, come la visualizzazione di un testo di risultato.


Questo non funziona L'utente non privilegiato può eseguire la procedura, ma la procedura non può eseguire sp_start_job, poiché l'utente non dispone delle autorizzazioni per eseguirla. Non voglio che il contenuto sia in una procedura, perché non voglio che il chiamante debba attendere che il lavoro finisca.

@shaharmo: è possibile eseguire la procedura memorizzata come proprietario del database, modificherò la mia risposta
Andomar

Continua a non funzionare. Ho fatto lo stesso errore. Ho provato a creare DoYourJob nel database msdb, così come nel mio database, con gli stessi risultati.

1
@shaharmo: Strano, mi chiedo chi sia il proprietario del database? Puoi anche usare with execute as 'loginname', funziona?
Andomar,

3

Fondamentalmente, sono necessarie le autorizzazioni su sp_start_job(vedere la sezione autorizzazioni).

I ruoli sono descritti in " Ruoli del database fissi di SQL Server Agent " (collegati dall'alto)

Modifica, gennaio 2012

Dopo il downvote anonimo 2 anni dopo ho risposto ...

Leggi la domanda Dice

Voglio consentire a qualsiasi utente del database di correre

poi

Non sono preoccupato per la sicurezza

e anche

Non riesco proprio a trovare come concedere autorizzazioni pubbliche al lavoro

Quindi i commenti di OP di seguito contraddicono la domanda


1
Questo non darà a tutti gli utenti le autorizzazioni per eseguire tutti i lavori? Voglio che abbiano il permesso di eseguire solo un lavoro specifico.

1
È quello che hai chiesto ... "concedi permessi pubblici al lavoro"
gbn

1

Ciò consentirà a un utente specifico (utente1) di eseguire qualsiasi processo Sql Agent.

I membri di SQLAgentUserRole e SQLAgentReaderRole possono solo avviare lavori di loro proprietà. I membri di SQLAgentOperatorRole possono avviare tutti i lavori locali, inclusi quelli di proprietà di altri utenti

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


0

Ho un'analoga necessità di concedere l'autorizzazione al mio operatore per eseguire manualmente le attività di SQL Server Agent. Ho seguito questo post Ruoli di database fissi di SQL Server Agent per assegnare il ruolo SQLAgentOperatorRole.

Spero che questo aiuto per risolvere il tuo caso.


Potresti inserire i dettagli di quello che hai fatto? Le risposte solo al link sono "disapprovate" - link rot & c.
Vérace,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.