在MS SQL 2005实例中有两个数据库。
对于这两个数据库,特定用户对dbo模式具有执行权限。
在数据库AI中有一个存储过程,它在数据库B的表中包含一个select语句。
dbo模式是否对此调用执行足够的权限,或者用户是否必须对数据库B中的表有select访问权限?
我们使用存储过程来访问所有的数据库,并希望用户只有执行权限。
如果启用了交叉数据库所有权链接 , 并且 A中的存储过程的所有者也是B中的表的所有者(相同的SID,而不只是相同的名称),那么EXECUTE权限就足够了。
如果其中任何一个不是真的,那么当前正在执行的login必须在B中拥有一个具有SELECT权限的用户。 另一种方法是使用代码签名 ,可以提供更细化的控制,允许用户只在执行过程时从表中进行select。
不,您还必须在架构或特定对象上授予SELECT。 在模式上授予EXECUTE只是允许用户做到这一点。 您还必须有权执行存储过程中的底层执行。