通过SQL Server上的默认模式和视图强制对表行执行安全性限制

我们有一个应用程序,该数据库依赖于SQL Server 2000.该应用程序的一个特定区域允许用户访问表中不应该存在的行:它们应该只访问来自供应商的行,而不能访问来自客户的行。 供应商和客户都存储在一张桌子上。 我们不能改变应用程序的这个特定区域来限制访问,供应商不会在不久的将来改变它。

所以,作为DBA,我正在考虑在数据库上创build一个解决scheme(直到供应商创build最终解决scheme):

  • 包含数据的表的名称称为dbo.FOOBAR
  • 我会在名为newuser的数据库上创build一个新的login名和一个新用户。
  • 之后,我将创build一个名为newuser.FOOBAR的视图,并使用SELECT语句只select用户应该从dbo.FOOBAR访问的行。
  • 在应用程序上,我可以将用户应用程序与访问数据库的用户相关联。

有了这个可能的解决scheme,用户将以新用户身份login到数据库。 涉及表FOOBAR的任何语句都会由于缺省模式而自动涉及到newuser.FOOBAR

我做了一些testing,似乎工作。 表dbo.FOOBAR有一个UPDATE / INSERT / DELETE触发器,它似乎在更新,插入和删除使用视图后工作。

我的问题是:这是一个强制执行安全访问不改变应用程序的首选方式? 有什么需要注意的吗? 有这个问题的另一个解决scheme吗?

TIA!

只要应用程序保持正常工作,这个方法似乎是一个可行的解决scheme。 这可能不是首选解决scheme,因为在执行由DBO运行的任何升级时需要小心,并且如果将新列添加到dbo.FOOBAR表(实际上是FUBAR),那么您将重新构build新用户.FOOBAR视图,以便它拾取新的列。