我有一个视图,它从不同数据库中的表中选择行.我想授予对视图的select访问权限,但不能直接访问基表.视图有一个where子句限制行数.
我可以将select授予视图而不是基表,还是需要切换到存储过程?我宁愿不采用后一种方式.
GRANT SELECT ON [viewname] TO [user]
应该这样做.
当您在其中一条评论中声明所讨论的表位于不同的数据库中时,则应用所有权链接.我怀疑某处链条有断裂 - 检查该链接是否有详细信息.
我也有这个问题.我使用了上面提到的链接信息,并找到了快速解决方案.如果你有不同的模式,可以说测试,并创建用户utest,模式的所有者测试和意见在架构中测试你有看法vTestView的基础上,从模式表DBO,而从中选择你会得到上述的错误-没有访问基础对象.这对我来说已经足够执行声明了
ALTER AUTHORIZATION ON test.vTestView TO dbo
;
这意味着我改变的所有权vTextView从架构它属于(测试),以数据库用户DBO,模式的所有者DBO.之后,如果没有任何其他权限,用户utest将能够从test.vTestView访问数据