SQL Server:如何防止通过公开视图修改数据?

Zac*_*ith 0 security sql-server view

我有一个数据库: DB 1

在另一个数据库中DB 2,我想创建一堆引用DB 1. 这些视图会相对复杂,有很多连接、聚合、子查询等。

我不希望 的用户DB 2能够修改DB 1. 即我不希望用户能够在视图上执行插入、更新、删除查询。

这篇博文:http : //sqlhint.com/sqlserver/views/creating-readonly-views

建议我可以使用INSTEAD子句。除了特定用户之外,我更愿意仅禁止视图本身的某些查询子句。这可能吗?

Tar*_*zer 7

这是通过视图和表的安全性来处理的。仅SELECT授予对视图和基础表的权限。

如果没有写访问权限,通过视图的 INSERT、UPDATE 和 DELETE 将失败。

如果用户可以通过一个组访问,并且您希望该组仍然可以访问但这些特定用户没有访问DENY权限,则可以使用该权限,因为该权限DENY优先于GRANT

  • @ZachSmith,但谁需要这些表的更新权限?谁需要拒绝访问? (2认同)
  • 您可以尝试使用触发器,如果​​它是从远程数据库启动的,它将随事务回滚。我没有那个代码。 (2认同)
  • @MguerraTorres,你可以这样做,但我只是授予所需的权限,然后根据需要使用拒绝。 (2认同)
  • @MguerraTorres 我不确定,但我认为这是不可能的。 (2认同)