SQL权限/安全性 - 我是否可以从使用另一个未授予权限的View的视图中“选择”授予权限?

时间:2009-06-08 23:23:01

标签: sql database security permissions roles

这是我的情景......

SQL角色

  • Staff_User

方案

表格

  • People.Persons

  • People.PhoneNumbers

视图

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

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

  • People.vwContactInformation - vwContactInformation“View”结合了vtPersons和vtPhoneNumbers中的数据,因此可以在Crystal Report中用作查询。

Staff_User角色已被授予vwContactInformation视图的“SELECT”权限,而不是其他任何内容。

我现在收到错误,说明对象vtPhoneNumbers的权限被拒绝。我还必须为此视图授予“SELECT”权限吗?根据另一个计划的经验,我没有必要这样做,一切运作良好。但是现在我在我创建的第二个SCHEME中遇到了这个错误。任何人都可以在第一个方案中建议我拥有的权限,允许权限级联到视图中调用的视图,表,函数等。

谢谢, 贾斯汀

1 个答案:

答案 0 :(得分: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语句