当基表位于不同的数据库中时,在视图而非基表上授予选择

Jiy*_*sub 18 sql-server

我有一个视图,它从不同数据库中的表中选择行.我想授予对视图的select访问权限,但不能直接访问基表.视图有一个where子句限制行数.

我可以将select授予视图而不是基表,还是需要切换到存储过程?我宁愿不采用后一种方式.

Jam*_*Orr 18

GRANT SELECT ON [viewname] TO [user]
Run Code Online (Sandbox Code Playgroud)

应该这样做.

  • 实际上,用户无权访问视图中引用的基表,因此我收到一条错误消息,指出我在当前安全上下文中没有访问权限. (5认同)

Roa*_*ior 15

当您在其中一条评论中声明所讨论的表位于不同的数据库中时,则应用所有权链接.我怀疑某处链条有断裂 - 检查该链接是否有详细信息.


小智 14

我也有这个问题.我使用了上面提到的链接信息,并找到了快速解决方案.如果你有不同的模式,可以说测试,并创建用户utest,模式的所有者测试和意见在架构中测试你有看法vTestView的基础上,从模式表DBO,而从中选择你会得到上述的错误-没有访问基础对象.这对我来说已经足够执行声明了

ALTER AUTHORIZATION ON test.vTestView TO dbo;

这意味着我改变的所有权vTextView从架构它属于(测试),以数据库用户DBO,模式的所有者DBO.之后,如果没有任何其他权限,用户utest将能够从test.vTestView访问数据