我正在尝试在任意数据库中设置一个触发器,该触发器将在执行时将信息存储在特定数据库中。但是,我发现如果触发器是由没有显式访问该数据库的人触发的,则触发器执行将失败。
我希望使用以下方法解决这个问题:
CREATE TRIGGER [myTrigger]
on database
with execute as 'UserWithPermissions'
但这似乎也不起作用......有谁知道这是否可能?任何指针将不胜感激。谢谢。
我正在尝试在任意数据库中设置一个触发器,该触发器将在执行时将信息存储在特定数据库中。但是,我发现如果触发器是由没有显式访问该数据库的人触发的,则触发器执行将失败。
我希望使用以下方法解决这个问题:
CREATE TRIGGER [myTrigger]
on database
with execute as 'UserWithPermissions'
但这似乎也不起作用......有谁知道这是否可能?任何指针将不胜感激。谢谢。
在 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