1

我正在尝试在任意数据库中设置一个触发器,该触发器将在执行时将信息存储在特定数据库中。但是,我发现如果触发器是由没有显式访问该数据库的人触发的,则触发器执行将失败。

我希望使用以下方法解决这个问题:

CREATE TRIGGER [myTrigger] 
on database
with execute as 'UserWithPermissions'

但这似乎也不起作用......有谁知道这是否可能?任何指针将不胜感激。谢谢。

4

1 回答 1

0

在 MSSQL 管理中,转到 DB-name => Security => Users 并确保用户具有访问权限。此外,在从其他机器运行 procs 时,Windows 网络身份验证也有很大帮助

- 编辑 -

我认为你想要的是'EXECUTE AS'。

CREATE PROCEDURE dbo.usp_Demo
WITH EXECUTE AS 'SqlUser1'
AS
SELECT user_name(); -- Shows execution context is set to SqlUser1.
EXECUTE AS CALLER;
SELECT user_name(); -- Shows execution context is set to SqlUser2, the caller of the    module.
REVERT;
SELECT user_name(); -- Shows execution context is set to SqlUser1.
GO
于 2012-09-21T02:00:01.693 回答