【问题标题】:SQL Server - Are permissions on tables required?SQL Server - 是否需要对表的权限?
【发布时间】:2013-12-15 12:30:51
【问题描述】:

我的问题再次更具体: 如何通过视图修改数据而不必对表授予 SELECT-Permissions?

我正在为我工​​作的公司设计和开发一个新数据库。 业务规则说,用户只能访问表中的特定行。 所以我使用视图来检查用户的权限并只返回那些用户有权访问的记录。

到目前为止,上帝。 但是,我还必须使用 INSTEAD-of-Triggers 检查 INSERT 和 UPDATE 和 DELETE 的权限。因为用户可以选择的行可能不是那些,他可以修改。

我的问题是: 当我有视图并授予 SELECT、INSERT、UPDATE 和 DELETE 权限时,它不起作用。当我插入此视图时,SQL Server 需要在基表中插入权限。那不会有问题。但是当我通过视图更新或删除行时,SQL Server 需要在基表上授予 SELECT 和 UPDATE/DELETE 权限。 我不想给桌子上的 SELECT 权限。

谢谢 克里斯

【问题讨论】:

  • 为了安全而使用触发器比在冬天入侵俄罗斯更糟糕。我会回到绘图板上。
  • 谢谢。这是通过视图更新数据的常见做法吗?当我必须使用 EXECUTE AS 时,我必须将登录名保密。因为有人知道在表级别具有权限的 LOGIN-Name,所以他可以在 SQL Server 中使用自己的帐户登录并使用 EXECUTE AS。

标签: sql-server permissions


【解决方案1】:

我在想:

1/ 通过在定义中添加如下条件来限制 VIEW 行:

WHERE UserName = SUSER_SNAME()
or
WHERE UserName = CURRENT_USER()

2/ 在相关视图上使用INSTEAD OF 触发器。

附注实际上,不允许使用 CREATE VIEW WITH EXECUTE。感谢您的留言。

【讨论】:

  • 就我而言,每个用户在 SQL-Server 上都有自己的登录名。谢谢,我会试试这个解决方案。
  • 你可以这样工作。您可以不授予公共角色任何权利,将用户添加为 ddl_reader 并以该用户身份执行您的视图。你说的是sql用户还是windows用户?如果是 Windows,则为您的用户使用活动目录组并添加它。是的,请注意这种视图逻辑,您可能会遇到数据库间连接问题。我做到了没有问题,但它可能会发生。您在此网站上有相关信息。
  • EXECUTE AS 不允许用于视图。返回表的 FUNCTIONS 也是不允许的。因此,EXECUTE AS 的唯一用途似乎与存储过程一起使用。我不明白那个安全概念。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-23
  • 1970-01-01
  • 2020-01-02
  • 1970-01-01
相关资源
最近更新 更多