在SQL Server 2008服务器上,我们有大约55个供应商数据库以SQL Server 2000兼容模式运行。 跨数据库所有权链接启用。
我们在这台服务器上也有自己的内部报告数据库,只有存储过程。 这些存储的procs查询供应商数据库表以供我们的报告目的。
所有供应商对象和报告存储过程都属于dbo。
(我知道这不是一个理想的设置,暂且搁置…)
有人可以告诉我,当我授予对用户X的报告存储过程的执行时,为什么我还必须给用户X在受影响的供应商数据库表(存储过程查询)的显式select权限?
我认为,只要启用了所有权链接,并且所有对象拥有相同的所有权,那么对存储过程的执行权就足够了,但是他们没有说用户X对表没有select权。
在此先感谢您的帮助。
如果您在两个数据库上都启用了所有权链接,并且运行存储过程的用户是供应商数据库的成员,则他们不应该需要这些表的权限。
例外是,如果您使用的是dynamicSQL,在这种情况下,您需要授予对基表的访问权限,并且安全链接不适用于dynamicSQL,因为dynamicSQL是在原始存储过程执行范围外执行的。