1

我正在使用包含一系列应用程序的所有表的数据库(我们称之为 DB_data)。为了尽量减少升级期间的停机时间,我们创建了一个外观数据库(我们称之为 DB_facade),它对 DB_data 中的每个表都有一个视图。它还包含与这些视图相反的所有函数和存储过程。

在尝试锁定 DB_data 中的安全性时,我们已经对 DB_data 中的所有用户的所有表进行了拒绝。所有这些用户也已在 DB_facade 中创建并具有视图权限。

这里的问题是,由于跨数据库所有权链接 DB_data 中的 DENY 覆盖了 DB_facade 中的 GRANT。

由于潜在的安全问题,我想避免为这两个数据库打开所有权链接(尽管在我最初的测试中,这似乎解决了访问问题)。此外,我们正在尝试尽量减少对应用程序的影响,因此要求所有访问都通过存储过程和使用证书(例如)是行不通的。

有没有人对如何处理这个问题有任何其他建议?

谢谢!

4

3 回答 3

1

如果您排除 DB_data 中表上的 DENY,您是否有此问题?如果您没有明确地 GRANT 对这些表的权限,您可能能够获得所需的安全性并通过视图获得访问权限。

于 2010-07-19T21:16:00.410 回答
0

您可以在 DB_data 数据库中为 DB_facade 数据库中的每个视图创建一个视图。新视图将有权从表中进行选择。对 DB_data 中的视图进行 GRANT SELECT。将 DB_facade 上的视图更改为从 DB_data 上的视图中选择。并且,这些表将设置 DENY。

我认识到这样做的一个缺点;用户仍然可以与 DB_data 数据库交互。他们将无法访问这些表,但他们可以访问新视图。

于 2010-07-20T17:24:47.417 回答
0

从我所见所闻,除非明确告知,否则 sql server 不会让您拥有任何权限。您应该能够将 DB_Data 中的 select(或使用角色 datareader)授予用户,并且只要它是同一个帐户并且映射到两个数据库(您必须在 db_facade 上授予 select 和 exec)应该可以工作正好。

于 2010-07-19T21:29:35.483 回答