我正在使用一个数据库(让我们称它为DB_data),它包含一系列应用程序的所有表。为了尽量减少升级期间的停机时间,已经创建了一个外观数据库(让我们称之为DB_facade),其中包含DB_data中每个表的视图。它还包含针对这些视图工作的所有函数和存储过程。
在尝试锁定DB_data中的安全性时,我们对DB_data中的所有用户的所有表进行了拒绝。所有这些用户也都是在DB_facade中创建的,具有视图的权限。
这里的问题是,由于跨数据库所有权链接,DB_data中的DENYs覆盖了DB_facade中的授权。
由于潜在的安全问题,我希望避免为这两个数据库启用所有权链接(尽管在我最初的测试中,这似乎确实纠正了访问问题)。此外,我们正在尝试最小化对应用程序的影响,因此要求所有访问都通过存储过程和使用证书(例如)是行不通的。
有没有人对如何处理这个问题有其他的建议?
谢谢!
发布于 2010-07-20 05:16:00
如果在DB_data中排除表上的DENY,您会遇到这个问题吗?如果您没有显式授予对这些表的权限,则可以获得所需的安全性,并通过视图获得访问权限。
发布于 2010-07-20 05:29:35
据我所见和所做,sql server不会让你拥有任何权限,除非你明确地这样做了。您应该能够在DB_Data中向用户授予select (或使用角色datareader),只要它是同一个帐户,并且映射到两个数据库(您必须在db_facade上授予select和exec ),就可以正常工作。
发布于 2010-07-21 01:24:47
您可以在DB_data数据库中为DB_facade数据库中的每个视图创建一个视图。新视图将具有从表中进行选择的权限。对DB_data中的视图授予SELECT权限。更改DB_facade上的视图以从DB_data上的视图中进行选择。并且,这些表将设置为DENY。
我认识到这样做的一个缺点:用户仍然可以与DB_data数据库交互。他们不能访问这些表,但他们可以访问新视图。
https://stackoverflow.com/questions/3284722
复制相似问题