7

Me gustaría saber cómo configurar permisos en SQL Server para permitir que el inicio de sesión/función de mi aplicación pueda enviar correos electrónicos usando msdb.dbo.sp_send_dbmail.Cómo dar acceso a los procedimientos de correo de la base de datos de SQL Server para iniciar sesión en una base de datos diferente?

Tengo una base de datos MyDb, un usuario MyUser que es un miembro del rol AppRole. Tengo un procedimiento almacenado myProc que llama al msdb.dbo.sp_send_dbmail. Si ejecuto myProc mientras está conectado como sa todo funciona bien, pero si ejecuto mientras está conectado como MyUser me sale un error:

Msg 229, Level 14, State 5, Procedure sp_send_dbmail, Line 1
The EXECUTE permission was denied on the object 'sp_send_dbmail', database 'msdb', schema 'dbo'.

Mi base de datos no tiene fiables sobre, por lo tanto, yo creo que puede' t use EXECUTE AS para suplantar a un usuario diferente, por ejemplo crear myProc con EJECUTAR COMO PROPIETARIO ... (MSDN reference)

Por lo tanto, creo que necesito hacer que mis usuarios también usen msdb, pero ¿puedo hacerlo a nivel de Rol o necesito hacer cada uno de mis usuarios de la base de datos también usuarios en msdb?

El perfil de correo de la base de datos que estoy utilizando se establece en público, por lo que no creo que esto esté relacionado con los permisos de perfil.

+1

Acabé la creación de mis usuarios como usuarios dentro msdb. Para simplificar, no quise utilizar la sugerencia de certificados de @Remus Rusanu, aunque en un entorno diferente puede ser una buena opción. Si tiene muchos usuarios de bases de datos, es posible usar EXECUTE AS para suplantar a un solo usuario de db y luego simplemente darle acceso a ese usuario a msdb, no tuve que buscar esa opción. – Rory

Respuesta

2

Puede usar EXECUTE AS y firmar su procedimiento y luego usar el certificado de firma para otorgar el permiso EXECUTE en msdb. Consulte Call a procedure in another database from an activated procedure, así como Signing Procedures with Certificates.

+0

Debería haber mencionado: la aplicación se implementa en un rango de clientes, por lo que la firma de procedimientos se vuelve complicada. Pero de lo contrario es una buena opción. – Rory

+0

No estoy seguro de seguir por qué es un problema. ¿No puede el proceso de implementación (la instalación de MSI o la configuración) manejar el aprovisionamiento del procedimiento, firmar y otorgar los permisos necesarios? –

+0

En teoría sí, en la práctica he encontrado que cuanto más simple, mejor cuando se trata de una amplia gama de DBA y entornos, así que preferiría no seguir la ruta de los certificados, etc. – Rory

1

Debería poder otorgarle a MyUser acceso público a MSDB y luego otorgar acceso de ejecución en el proceso sp_send_dbmail a ese usuario. Puede agregar al usuario por su cuenta o crear un rol personalizado en MSDB y agregar todos los usuarios que necesitan acceso de exec a sp_send_dbmail.

1

De acuerdo con microsoft solo tiene que dar permiso a los usuarios para "la función de base de datos DatabaseMailUser en la base de datos msdb".

+0

Y antes de hacerlo, haga cada uno de mis los usuarios de bases de datos también los usuarios en msdb? – Rory

+0

Tienes razón, esta no fue una respuesta bien pensada, mis disculpas. – Tony

0

necesita dar clases, la base de datos -> databaseusermailuserRole

enter image description here

Cuestiones relacionadas