我们在 SQL Server 2008 服务器上以 SQL Server 2000 兼容模式运行了大约 55 个供应商数据库。跨数据库所有权链接已启用。
我们在这个服务器上还有自己的内部报告数据库,其中只有存储过程。这些存储过程查询供应商数据库表以用于报告目的。
所有供应商对象和报告存储过程均归 dbo 所有。
(我知道这不是一个理想的设置。暂时把它放在一边......)
有人能告诉我,当我授予用户 X 对报告存储过程的执行权限时,为什么我还必须授予用户 X 对受影响的供应商数据库表(存储过程查询的表)的明确选择权限?
我认为,只要启用了所有权链,并且所有对象都具有相同的所有权,那么对存储过程的执行权限就足够了,但他们没有说用户 X 对表没有选择权限。
在此先感谢您的帮助。
答案1
如果您在两个数据库上都启用了所有权链接,并且运行存储过程的用户是供应商数据库的成员,那么他们就不需要对表的权限。
例外情况是如果您使用动态 SQL,在这种情况下您需要授予对基表的访问权限,并且安全链不适用于动态 SQL,因为动态 SQL 是在原始存储过程执行范围之外执行的。