首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将select授予dbo视图,而不对非dbo表进行选择

将select授予dbo视图,而不对非dbo表进行选择
EN

Database Administration用户
提问于 2012-10-19 11:39:56
回答 1查看 5.7K关注 0票数 5

Server 2008 R2

我们有一个名为" JoeBlogs“的登录用户,这个用户拥有自己的默认schema of JoeBlogs-它只有Public访问数据库。

然后,我们在一个SELECT视图上授予它dbo --然而,dbo视图从属于非dbo的底层表中选择数据,因此我们从视图中选择一个错误,即拒绝对底层表进行访问。

如何将用户配置为拥有对dbo视图的select访问权,而不是底层的非dbo表?

这有可能吗?

若尔登

EN

回答 1

Database Administration用户

回答已采纳

发布于 2012-10-22 13:57:12

在着手解决问题之前,你必须了解这个问题。

当您从视图中选择时,Server系统将检查权限两次:

从视图中选择一次,当视图引用基础表时一次。

显然,如果用户对基础表没有权限,则第二次检查将失败。

微软已经用“所有权链”(称为OC)解决了这个问题。

OC将绕过视图引用表时所做的权限检查,

只有当视图的所有者与表的所有者相同时。

问题是,OC完全绕过了许可检查,这意味着它也可以绕过拒绝.

例如,如果"JoeBlogs“具有create view权限,则他可以创建一个可以访问整个表的新视图。

我建议你在决定你的行动之前先读一读关于所有权的链接。

网上图书

msdn博客

详细示例,使用存储过程而不是视图

尽管如此,第一个直观的解决方案将是在与基础表相同的非dbo模式下创建视图(或与非dbo模式相同的用户所拥有的模式)。

但是,如果您发现该解决方案风险太大,还有另一种(甚至更好的)选择:

可以始终使用带有EXECUTE AS子句的函数(多语句表值函数):

创建函数语法

执行为子句

此方法将允许您在函数属于dbo时从函数(函数的execute权限)中进行选择。execute as子句中指定的用户必须对基础表具有权限。

票数 3
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/27229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档