【问题标题】:SQL Permissions / Securables - Can I give permissions to a "Select" from a View that uses another View that doesn't have permission granted?SQL Permissions / Securables - 我可以从使用另一个没有授予权限的视图的视图中授予“选择”权限吗?
【发布时间】:2010-11-01 08:05:29
【问题描述】:

这是我的场景...

SQL 角色

  • Staff_User

方案

表格

  • People.Persons

  • 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 中遇到了这个错误。任何人都可以建议我在第一个方案中拥有什么,该方案允许权限级联到视图、表、函数等,这些视图、表、函数等从角色可访问的视图中调用。

谢谢, 贾斯汀

【问题讨论】:

  • 您使用的是什么 DBMS?一些供应商提供“调用者”权限和“定义者”权限特定行为。
  • Microsoft SQL Server 2008。我认为它不提供这些特定行为。

标签: sql database security permissions roles


【解决方案1】:

假设 SQL Server(所有版本)

错误提示“拒绝”:如果权限缺失或不正确,您会看到类似“不存在或没有权限”的信息。基于此,我会检查 vtPhoneNumbers 的权限,看看是否设置了任何明确的 DENY。 DENY is always evaluated and takes precedence.(抱歉,在 BOL 中找不到)。

为什么:

ownership chains/chaining 的想法意味着如果所有对象都在同一个模式中(也称为所有者),则不会检查所引用对象的权限。

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

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

【讨论】:

    猜你喜欢
    • 2010-10-20
    • 2011-08-24
    • 2017-07-06
    • 1970-01-01
    • 2011-07-02
    • 2011-09-07
    • 2011-05-07
    • 2017-03-07
    • 2023-04-07
    相关资源
    最近更新 更多