【问题标题】:SQL Server 2005 - Modifying Data through a viewSQL Server 2005 - 通过视图修改数据
【发布时间】:2013-12-14 20:18:06
【问题描述】:

我希望用户通过视图选择和修改数据,但不授予对基表的权限。

通过视图选择数据可以正常工作。

但是当我想通过视图INSERTUPDATEDELETE 数据时,SQL Server 说基表缺少权限。

以下对象:

  • 表,命名:dbo.test
  • 查看,命名:dbo.vw_test

表格有两列:

  • Column_1身份....
  • Column_2int(可更新列)

视图有如下声明:

SELECT * FROM dbo.test;

我已经在这个数据库上创建了一个 LOGIN 和一个 USER,在这个视图上具有 SELECT、INSERT、UPDATE、DELETE 权限。基表上没有 DENY。

如前所述,SELECT 有效,但更新 Column_2 无效。

为什么?我需要授予基表的所有权限吗?

我希望不会。我已经在视图上创建了一个INSTEAD OF INSERT 触发器来测试它。但它不起作用。

我可以做什么,通过视图修改数据?

【问题讨论】:

    标签: sql sql-server permissions views


    【解决方案1】:

    我猜你误解了观点。如果您正在修改视图内的数据,则意味着您正在直接访问存在于定义该视图的 SQL 语句中的所有表。这意味着如果您要修改数据,将直接对该视图表示的所有表进行修改,这最终意味着您必须提供足够的权限才能执行此类操作。请参阅this 链接中的参考(开始之前的部分 -> 权限)。

    【讨论】:

    • 谢谢。我知道,视图直接访问底层基表。但我认为,我必须只授予视图而不是表的权限。当我必须在表上授予 INSERT、UPDATE 和 DELETE-Permissions 时,我也必须授予 GRANT SELECT。否则 UPDATE 和 DELETE 将失败。但我不能给表上的 SELECT-Permissions,因为数据库在视图中实现了 SELECTS 的行级安全性。
    猜你喜欢
    • 1970-01-01
    • 2012-02-22
    • 2011-07-16
    • 1970-01-01
    • 1970-01-01
    • 2010-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多