Tengo un desencadenante en el que deseo enviar un correo electrónico sobre las actualizaciones de una tabla en una tabla SalesClosing. Ahora el usuario (dbuser) que ejecuta el desencadenador tiene permisos muy limitados. Por lo tanto, quiero que el desencadenador se ejecute como dbmailuser. Un usuario que tiene derecho a enviar correos electrónicos. Probé que dbmailuser puede ejecutar sp_send_dbmail cuando inició sesión como ese usuario. Sin embargo, cuando el disparador se dispara, obtengo un error. No puedo ejecutar sp_send_dbmail. Así que inicié sesión como dbuser , ejecuté EXECUTE AS LOGIN = 'dbmailuser'; y fue capaz de ejecutar sp_send_dbmail. Ahora por qué no puedo hacer eso en un disparador. Estoy usando sql server 2008. A continuación se muestra el disparador ddl.servidor sql se ejecuta como un error de permiso en el desencadenador
alter TRIGGER SalesClosingTrigger ON SalesClosing
WITH EXECUTE AS 'dbmailuser'
for insert, update
AS
BEGIN
EXEC msdb.dbo.sp_send_dbmail
[email protected]_name = 'Test_Email_Profile',
@recipients='[email protected]',
@body = 'This is a test for Database Mail.',
@body_format = 'TEXT',
@subject = 'Database Mail Test'
END
GO
+1 no es todos los días ¡Conozco a alguien que entiende el contexto EXECUTE AS! –
+1 Claro y justo en el punto –