2011-10-07 33 views
0

我在sql server数据库中设置了多个视图。这些视图是从存储过程中选择的,该存储过程在其声明中具有WITH EXECUTE AS'proxyuser'子句。它执行的select语句是动态创建的,并使用sp_executesql存储过程执行。一切工作都正常,直到有必要在其中一个视图的定义中包含到不同数据库中的表的连接,以便视图从它所在的数据库和同一服务器上的另一个数据库中进行选择。从多个数据库中选择sql视图,代理用户无权访问远程数据库

我得到的错误是这样的:服务器主体“proxyuser”无法访问当前安全上下文下的数据库“mydb”。

这是我已经试过:

  1. 删除从第二数据库PROXYUSER和映射登录到数据库这里推荐.. http://sqlmusings.wordpress.com/2008/06/12/issue-server-principal-is-not-able-to-access-the-database-under-the-current-security-context/

  2. 启用跨数据库所有权链接如此处推荐的那样.. http://social.msdn.microsoft.com/Forums/en-US/sqlsecurity/thread/07dcab8c-b830-4ca9-8afc-3e75772f44d3/

并且我的方案不符合Microsoft支持文章#913422所述的要求,该要求描述了相同的错误消息。该代理使用Sql Server身份验证,而不是Windows身份验证。

任何想法?

在此先感谢。

回答

1

在一个不同的项目上进行长时间的追踪工作后,我终于回来了。我解决了这个问题,以至于我不再使用WITH EXECUTE AS'proxyuser'语法。我正在连接的用户有足够的权限执行该操作。我不知道为什么我以前没有尝试过。