我在尝试让我的存储过程使用时遗漏了一些东西EXECUTE AS。存储过程正在从中读取数据source_db、聚合数据并将结果存储在 中target_db。
sp 本身在target_db. 我有一个专用的登录名并将它映射到用户source_db和target_dbsp 的所有者(所以有一个用户app_agent在source_db和target_db登录app_agent)。
如果我以 身份登录app_agent并执行
EXEC target_db.app_agent_schema.import_data
Run Code Online (Sandbox Code Playgroud)
一切正常。但如果我改变
ALTER PROCEDURE app_agent_schema.import_data WITH EXECUTE AS OWNER` (or `AS SELF`)
Run Code Online (Sandbox Code Playgroud)
并尝试执行它,它抛出
服务器主体“app_agent”无法在当前安全上下文下访问数据库“source_db”。
我正在使用 SQL Server 2008。
有人能指出我的错误吗?
谢谢
更新
经过一些研究,我发现ALTER DATABASE target_db SET TRUSTWORTHY ON解决了问题,但这对我来说似乎不是正确的解决方案......
我有一份运行 SSIS 包的工作。
目前所有者是代理帐户。我可以从系统管理员帐户手动运行该作业。
我们的网络服务使用受限帐户登录。它需要执行作业。目前它根本看不到作业(当我尝试按名称执行时,它说它不存在)。
我尝试将工作所有者更改为受限帐户。现在它可以看到作业,但作业执行失败,因为它无法再运行 SSIS 包。
必须有一种方法可以让受限帐户运行另一个帐户拥有的作业,对吗?