这是我的情景......
SQL角色
方案
表格
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中遇到了这个错误。任何人都可以在第一个方案中建议我拥有的权限,允许权限级联到视图中调用的视图,表,函数等。
谢谢, 贾斯汀
答案 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语句