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.
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