我有一个触发器访问另一个数据库。 但我收到一个错误:
“服务器主体”A“在当前的安全上下文中不能访问数据库”B“
其中A是用户login。 然后,我将它设置为在两个数据库(从中调用触发器的数据库和触发器中引用的数据库)中以相同login名login的用户执行。 但是,这个错误仍然存在。 我把推荐的数据库设置为可以适应的,但是这并不起作用。
另外, sa不是一个用户,而是一个login,但是当我运行的触发器是从一个salogin发出,没有任何冒充,所有工作都很好; 但是当我尝试冒充任何用户时,所有的都打破了。
我如何让这个触发器为所有用户运行,包括那些不能访问我引用的数据库的用户
您必须将访问权限授予引用数据库中触发器设置为引用的所有项目,这是一个坏主意。
否则,您将需要授予访问您所引用的数据库及其任何对象(表,视图,存储过程等)到需要使用触发器的任何login。
或者,如果触发器从应用程序调用中被触发,则可以为应用程序创buildlogin名,在两个数据库中为该login名适当地configuration权限,并将该应用程序设置为以该用户身份进行连接。 当然,您将需要在应用程序级别处理其他安全和日志logging问题。