我需要向哪个 sql GP 用户主体授予 CREATE 权限才能让我的触发器继续工作?

What sql GP user principle do I need to GRANT the CREATE privilage to for my trigger to still work?

我在公司数据库中的 [dbo].[POP10300] 上放置了一个触发器,以便在收到采购订单时在自定义 table 中添加一条记录:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE TRIGGER [dbo].[POReceivingTrigger] 
   ON  [dbo].[POP10300] 
   AFTER INSERT
AS 
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

-- Insert statements for trigger here
INSERT INTO [cp].[PrintQueue] ([Created], [Module], [Trigger], [Alert or Report], [Event])
    SELECT
        GETDATE()
       ,'GP'
       ,POPRCTNM
       ,'BackOrderedItemsReceived'
       ,'PO Received'
    FROM INSERTED
END

它适用于 GP 用户 sa 但不适用于任何其他 GP 用户。他们在接收时收到此错误弹出窗口:

我需要什么 sql GP 用户原则才能 GRANT INSERT 特权 [cp].[PrintQueue] 触发器仍然有效?

已修复。

GRANT INSERT ON [cp].[PrintQueue] TO [DYNGRP];

What sql GP user principle do I need to GRANT the INSERT privilege to on [cp].[PrintQueue] for the trigger to still work?

默认情况下,触发器以用户 运行 的身份执行导致触发器触发的 DML 语句。所以要么

  1. 改变触发器的执行上下文为EXECUTE AS OWNER,

  2. 授予所有用户 INSERT 目标 table,或

  3. 确保目标架构和触发器对象的架构由同一用户拥有,以启用所有权链来抑制对 INSERT 的权限检查。