Conceder permisos para ejecutar un trabajo de servidor SQL


22

Tengo un trabajo en mi servidor MSSQL 2005, que quiero permitir que se ejecute cualquier usuario de la base de datos.

No me preocupa la seguridad, ya que la entrada al trabajo real del trabajo proviene de una tabla de base de datos. Simplemente ejecutar el trabajo, sin agregar registros a esa tabla no hará nada.

Simplemente no puedo encontrar cómo otorgar permisos públicos para el trabajo.

¿Hay alguna forma de hacer esto? Lo único en lo que puedo pensar en este momento es tener el trabajo en ejecución constantemente (o en un horario), pero dado que solo necesita hacer un trabajo real raramente (tal vez una vez cada pocos meses) y quiero que el trabajo sea hecho tan pronto como existe, esto no parece ser una solución óptima.

Respuestas:


20

Puede crear un procedimiento almacenado que ejecute el trabajo. Puede usar with execute as ownerpara ejecutar el procedimiento almacenado como propietario de la base de datos. De esa manera, los propios usuarios no necesitan permisos sp_start_job.

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

Otorgue derechos de ejecución DoYourJobpara permitir que las personas comiencen el trabajo.

Por supuesto, también puede poner el contenido del trabajo en un procedimiento y otorgar derechos para ejecutarlo. Eso permitiría más interacción, como mostrar un texto de resultado.


Esto no funciona El usuario sin privilegios puede ejecutar el procedimiento, pero el procedimiento no puede ejecutar sp_start_job, porque el usuario no tiene permisos para ejecutarlo. No quiero que el contenido esté en un procedimiento, porque no quiero que la persona que llama tenga que esperar a que termine el trabajo.

@shaharmo: Puede hacer que el procedimiento almacenado se ejecute como propietario de la base de datos,
editaré

Sigue sin funcionar. Me sale el mismo error. Traté de crear DoYourJob en la base de datos msdb, así como en mi base de datos, con los mismos resultados.

1
@shaharmo: Extraño, me pregunto quién es el propietario de la base de datos. También puedes usar with execute as 'loginname', ¿eso funciona?
Andomar

3

Básicamente, se necesitan permisos en sp_start_job(consulte la sección de permisos).

Los roles se describen en " Roles de base de datos fijos del Agente SQL Server " (enlazados desde arriba)

Edit, ene 2012

Después del voto anónimo anónimo 2 años después de que respondí ...

Lea la pregunta. Dice

Quiero permitir que cualquier usuario de la base de datos ejecute

luego

No me preocupa la seguridad

y también

Simplemente no puedo encontrar cómo otorgar permisos públicos al trabajo

Entonces, los comentarios de OP a continuación contradicen la pregunta


1
¿No dará esto a todos los usuarios permisos para ejecutar todos los trabajos? Quiero que tengan permiso para ejecutar solo un trabajo específico.

1
Que es lo que pediste ... "concede permisos públicos para el trabajo"
gbn

1

Esto permitirá que un usuario específico (usuario1) ejecute cualquier trabajo de Agente SQL.

Los miembros de SQLAgentUserRole y SQLAgentReaderRole solo pueden iniciar trabajos de su propiedad. Los miembros de SQLAgentOperatorRole pueden iniciar todos los trabajos locales, incluidos los que son propiedad de otros usuarios

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


0

Tengo una necesidad similar de otorgar permiso a mi operador para ejecutar manualmente las tareas del Agente SQL Server. Seguí esta publicación Roles de base de datos fijos del Agente SQL Server para otorgar el rol SQLAgentOperatorRole.

Espero que esto ayude a resolver su caso.


¿Podrías poner los detalles de lo que hiciste? Las respuestas de solo enlace están "mal vistas" - link rot & c.
Vérace
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.