服务器主体“A”在当前安全上下文中无法访问数据库“B”

服务器主体“A”在当前安全上下文中无法访问数据库“B”

我有一个访问另一个数据库的触发器。但是我收到一个错误:

“服务器主体‘A’在当前安全上下文中无法访问数据库‘B’”

其中 A 是用户登录名。然后我将其设置为以在两个数据库(调用触发器的数据库和触发器中引用的数据库)中具有相同登录名的用户身份执行。但是,此错误仍然存​​在。我将引用的数据库设置为 pushworthy,但这不起作用。

此外,sa不是用户而是登录名,但是当我运行触发器时,它是从 sa 登录发出的,没有任何模拟,一切运行良好;但是当我尝试模拟任何用户时,一切都中断。

我如何让此触发器为所有用户(包括那些无权访问我引用的数据库的用户)运行

答案1

您必须授予触发器设置为引用的引用数据库中所有项目的公共访问权限,这是一个坏主意。

否则,您将需要向需要使用触发器的任何登录授予对所引用数据库及其任何对象(表、视图、存储过程等)的访问权限。

或者,如果您的触发器是从应用程序调用触发的,您可以为应用程序创建一个登录名,在两个数据库中为该登录名适当配置权限,并将应用程序设置为以该用户身份连接。当然,您需要在应用程序级别处理其他安全和日志记录问题。

相关内容