2009-06-08 46 views
0

这里是我的情况...SQL权限/安全性 - 我可以授予对使用另一个未授予权限的视图的“选择”权限吗?

SQL角色

  • Staff_User

方案

  • 人民

  • People.Persons

  • People.PhoneNumbers

查看

  • People.vtPersons - vtPersons视图过滤来自Persons表的数据,仅显示属于当前登录用户的数据。

  • People.vtPhoneNumbers - 的vtPhoneNumbers视图过滤从PHONENUMBERS表仅示出了属于在用户当前登录的数据。

  • People.vwContactInformation - 的vwContactInformation“查看”结合了vtPersons和vtPhoneNumbers数据,因此它可以被用作一个水晶报表的查询。

的Staff_User角色已被授予“SELECT”权限vwContactInformation观点而已。

我收到一个错误,现在说权限被拒绝给对象vtPhoneNumbers。我还必须授予对此视图的“SELECT”权限吗?从另一个方案的经验来看,我不必这样做,一切运作良好。但是现在我在我创建的第二个SCHEME中收到了这个错误。任何人都可以建议我在第一个方案中拥有什么,它允许权限级联到角色可访问的视图中调用的视图,表格,函数等。

感谢, 贾斯汀

+0

您使用的是哪些DBMS?一些供应商提供“调用者”权利和“定义者”权利的特定行为。 – 2009-06-09 03:50:49

回答

0

假设的SQL Server(所有版本)

错误表示“拒绝”:如果权限已丢失或不正确,你会看到类似“不存在或没有权限”。基于此,我会检查vtPhoneNumbers的权利,看看是否设置了任何显式的DENY。 DENY is always evaluated and takes precedence.(对不起,在BOL中找不到它)。

为什么:

ownership chains/chaining想法意味着,如果所有的对象都在相同的架构(也称为所有者),不检查所引用的对象的权限。

在这种情况下,不应该检查vtPhoneNumbers和vtPersons的权限,因为所有视图和表都位于“People”架构中。

注意,REVOKE删除权限(以前使用GRANT或DENY设置)。有人可能使用了DENY而不是REVOKE来删除之前关于vtPhoneNumbers的GRANT声明