a1e*_*x07 13 sql-server-2008 security
我在尝试让我的存储过程使用时遗漏了一些东西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解决了问题,但这对我来说似乎不是正确的解决方案......
Rem*_*anu 26
这在使用 EXECUTE AS 扩展数据库模拟中进行了解释。EXECUTE AS 上下文仅在当前数据库中受信任,允许它溢出到其他数据库是特权攻击向量的升级。
有两种解决方案,均在上面链接的文章中进行了描述:
最简单的方法是标记数据库 TRUSTWORTHY: ALTER DATABASE [source_db] SET TRUSTWORTHY ON;。虽然简单,也是因为它使危险dbo的source_db一个事实上的sysadmin。