我们有一个应用程序,其数据库依赖于 SQL Server 2000。该应用程序的特定区域允许用户访问他们不应该访问的表中的行:他们只能访问来自供应商的行,而不能访问来自客户的行。供应商和客户都存储在一个表中。我们无法更改应用程序的这个特定区域来限制访问,而且供应商近期也不会更改它。
因此,作为 DBA,我正在考虑在数据库上创建一个解决方案(直到供应商创建最终解决方案):
- 包含数据的表的名称称为dbo.FOOBAR。
- 我将在数据库中创建一个新的登录名和一个新的用户,名为新用户。
- 之后,我将创建一个名为新用户.FOOBAR,使用 SELECT 语句仅选择用户应该有权访问的行dbo.FOOBAR。
- 在应用程序上,我可以将用户应用程序与访问数据库的用户关联起来。
使用此可能的解决方案,用户将以以下身份登录数据库新用户. 任何涉及表的语句酒吧将涉及新用户.FOOBAR由于默认架构,因此会自动执行。
我做了一些测试,它似乎有效。表格dbo.FOOBAR有一个 UPDATE/INSERT/DELETE 触发器,并且它似乎在使用视图更新、插入和删除后工作。
我的问题是:这是在不更改应用程序的情况下强制执行安全访问的首选方法吗?我是否应该考虑一些注意事项?还有其他解决方案吗?
短暂性失眠!
答案1
只要应用程序保持正常工作,此方法似乎是一个可行的解决方案。它可能不是首选解决方案,因为在进行任何升级时,您需要小心,它们是由 DBO 运行的,并且如果在 dbo.FOOBAR 表中添加了新列(实际上是 FUBAR),您需要重建 newuser.FOOBAR 视图,以便它获取新列。