0

这是我的场景...

SQL 角色

  • Staff_User

方案

  • 人们

  • 人.人

  • People.PhoneNumbers

意见

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

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

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

Staff_User 角色已被授予对 vwContactInformation 视图的“SELECT”权限,仅此而已。

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

谢谢,贾斯汀

4

1 回答 1

0

假设 SQL Server(所有版本)

错误显示“拒绝”:如果权限丢失或不正确,您会看到“不存在或没有权限”之类的内容。基于此,我会检查 vtPhoneNumbers 的权限,看看是否设置了任何明确的 DENY。DENY 总是被评估并优先。(抱歉,在 BOL 中找不到)。

为什么:

所有权链/链接的想法意味着如果所有对象都在同一个模式中(又名所有者),则不会检查引用对象的权限。

在这种情况下,不应检查 vtPhoneNumbers 和 vtPersons 的权限,因为所有视图和表都在“人员”模式中。

请注意,REVOKE 删除权限(之前使用 GRANT 或 DENY 设置)。有人可能使用了 DENY not REVOKE 来删除先前关于 vtPhoneNumbers 的 GRANT 语句

于 2009-06-09T04:48:05.520 回答