有没有办法让我的数据库中的用户可以执行 msdb.dbo.sp_send_dbmail
不需要将它们添加到msdb数据库和databasemailuserrole?
我试过这个:
ALTER PROCEDURE [dbo].[_TestSendMail]
(
@To NVARCHAR(1000),
@Subject NVARCHAR(100),
@Body NVARCHAR(MAX)
)
WITH EXECUTE AS OWNER
AS
BEGIN
EXEC msdb.dbo.sp_send_dbmail @profile_name = N'myProfile',
@recipients = @To, @subject = @Subject, @body = @Body
END
但我有个错误:
The EXECUTE permission was denied on the object 'sp_send_dbmail', database 'msdb', schema 'dbo'.
谢谢!
3条答案
按热度按时间lvjbypge1#
您的方法是可以的,但是您的 Package 程序必须在msdb数据库中。然后,执行“exec msdb.dbo.\u testsendmail”
这仍然会在msdb中留下dbo.\u testsendmail的权限问题。但是public/execute就足够了:它只公开您需要的3个参数。
如果有疑问,请添加加密。这足以阻止任何没有系统管理员权限的人查看代码
nkkqxpd92#
实际上,您可以使用证书签名的存储过程执行此操作,而不必在msdb中执行此操作:
5n0oy7gb3#
一种可能的解决方案是将邮件封装为存储过程,例如mail\u error\u as\u mailer(稍后您将调用它)和另一个存储过程,例如。
但这需要:*硬编码密码(确保用户无法查看存储过程的定义…)*允许用户访问sp\u oacreate等(打开其他安全问题(例如dos)
这样他们就只能按你想要的方式使用邮件,而不允许他们邮寄其他东西。
或者更安全一些,让用户将邮件放入某种邮件队列(您可以控制他们可以放入什么),并让代理帐户定期发送这些邮件
或者:允许他们寄信,但要拿一个有生 rust 钉子的大棍子