我在尝试使存储过程使用时丢失了某些东西EXECUTE AS
。存储过程正在从中读取数据source_db
,对其进行汇总并将结果存储在中target_db
。
sp本身在中target_db
。我有一个专用的登录名,并将其映射到sp的所有者source_db
和target_db
sp的所有者中(因此,app_agent
在source_db
和target_db
登录中都有一个用户app_agent
)。
如果我以身份登录app_agent
并执行
EXEC target_db.app_agent_schema.import_data
一切正常。但是如果我改变
ALTER PROCEDURE app_agent_schema.import_data WITH EXECUTE AS OWNER` (or `AS SELF`)
并尝试执行它,它会抛出
服务器主体“ app_agent”在当前安全上下文下无法访问数据库“ source_db”。
我正在使用SQL Server 2008。
有人可以指出我的错误吗?
谢谢
更新
经过一番研究,我发现可以ALTER DATABASE target_db SET TRUSTWORTHY ON
解决问题,但对于我来说似乎并不是正确的解决方案...
1
我认为答案是使用数据库级别的跨数据库所有权链选项。我能够在您的情况下重现该错误,但没有给出足够的详细信息来知道我是否准确地重现了该问题……CDOC选项对我而言不起作用,但请尝试一下,看看是否可以。
—
乔恩·塞格尔