sql-server - sql server执行为触发器中的权限错误

标签 sql-server sql-server-2008 triggers

我有一个触发器,我想发送一封有关 SalesClosing 表中的行更新的电子邮件。现在执行触发器的用户(dbuser)的权限非常有限。所以我希望触发器作为 dbmailuser 执行。有权发送电子邮件的用户。我测试了 dbmailuser 在以该用户身份登录时可以执行 sp_send_dbmail。当触发器触发时,我收到错误无法执行 sp_send_dbmail。所以我以 dbuser 身份登录 ,运行 EXECUTE AS LOGIN = 'dbmailuser';并能够执行 sp_send_dbmail。现在为什么我不能在触发器中做到这一点。我使用的是 sql server 2008。下面是触发器 ddl。

alter TRIGGER SalesClosingTrigger ON SalesClosing
WITH EXECUTE AS 'dbmailuser'
for insert, update
AS
BEGIN
  EXEC msdb.dbo.sp_send_dbmail
  --@profile_name = 'Test_Email_Profile',
  @recipients='testemail@test.com',
  @body = 'This is a test for Database Mail.',
  @body_format = 'TEXT',
  @subject = 'Database Mail Test'
END 
GO

最佳答案

这是由于execute-as-user scoping - 到数据库级用户的上下文切换默认仅限于该数据库(并且上面的代码在给定数据库外部执行到 msdb),并且仅数据库身份验证器无效。请参阅上面的链接,了解有关如何解决/解决方法的多个选项。

关于sql-server - sql server执行为触发器中的权限错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1709335/

相关文章:

sql - 将确切的一行移到所有行的顶部,留下所有其他的 ASCENDING

xml - 如何从 XML 变量读取数据?

sql-server - 触发器中的 If 语句取决于插入的值

Mysql触发器: Tried other suggestions but still get Error #1064

sql-server - SQL Server 大型日志文件

postgresql - 在 View 上使用 'instead of' 触发器为 jsonb 数组中的每个元素插入

python - 如何跨 SQL Server 和 Postgres 比较两个表列哈希的哈希值?

SQL Server 存储过程并在 VB.NET 中执行

sql - 如何使用非唯一外键强制数据库完整性?

sql - 删除 SQL Server 字段末尾的隐藏字符