有没有办法设置用户运行 SP,但不能访问底层数据表?

Rac*_*hel 6 sql-server-2005 stored-procedures permissions linked-server

我们在链接的两个独立服务器上有两个数据库实例。网站用户需要能够在 DatabaseA 上运行查询 DatabaseB 表的存储过程,但是它不应该能够直接从 DatabaseB 上的表中读取。

在 Sql Server 2005 中可以实现这样的事情吗?

简单地创建一个存储过程并授予 Web 用户执行它的权限会返回错误 Access to the remote server is denied because no login-mapping exists.

我真的不想让网站用户帐户免费访问 DatabaseB 表。

更新

Aaron 的使用建议EXECUTE AS OWNER不起作用,因为Owner无法访问 DatabaseB。

使用会EXECUTE AS 'UserWithPermissions'返回错误Access to the remote server is denied because the current security context is not trusted。在线查找这个让我相信这是因为数据库没有标记为TRUSTWORTHY,所以远程数据库拒绝连接。我怀疑如果两个数据库实例在同一台服务器上它会正常工作。

我不想设置 web 数据库,TRUSTWORTHY因为它的一些安全性更宽松,所以我选择了 Aaron 的另一个选项:创建一个DatabaseB只能访问包含网站应访问数据的特定视图的用户,然后进入链接服务器对象上的安全属性并设置网站用户在访问链接服务器时以新的受限用户身份登录。

这允许我的网站用户对私有数据库中的特定数据具有有限的访问权限,而不能访问任何基础表。

Aar*_*and 4

不能用execute as owneror来运行程序 A 吗execute as 'db user tied to security account associated with linked server'?这样调用者的权利就不必转移......

或者,您可以在远程服务器上创建一个仅能够执行所需查询的登录名,然后将模拟帐户添加到服务器 A 上的现有链接服务器,以使本地 Web 服务器登录名模拟服务器 B 上的新登录名。