通过第三个数据库使用相同的登录名连接两个数据库是否更安全?

Rac*_*hel 18 security database-design

我们有以下设置:

  • 包含桌面软件使用的私有数据的多个生产数据库
  • 公共网站的网络数据库,需要来自私人数据库的一些数据
  • 一个中间数据库,其中包含一些从私有数据库中提取数据的视图和存储过程

目前网站登录web数据库,web数据库连接中间数据库,在生产数据库上拉取数据或执行存储过程。所有数据库都在同一个SQL实例上,整个过程使用同一个用户账号。

用户账户对web数据库和中间数据库有完全访问权限,但只能访问私有数据库的特定视图和存储过程

这真的比让公共数据库直接连接到私有数据库更安全吗?

中间数据库似乎只是为了使事情复杂化,因为使用相同的登录名访问所有数据库中的数据,并且它已经仅限于私有数据库中所需的视图/SP。我希望删除它。

gbn*_*gbn 7

一件事在这里跳出来:

整个过程使用同一套登录凭证

问题

所以假设的 userX(无论是使用 Excel 的一些肉袋,还是 IIS AppPool Identity)都可以看到一些视图和代码。这些视图和代码在哪个数据库中并不重要,因为无论如何 userX 都设置在 3 个数据库中。

但是,您会失去这样的所有权链接。

比如说WebDB.dbo.SomeProc电话PrivateDB.dbo.SomeTable。UserX 需要对这两个对象的权限。如果这是OneDB.WebGUI.SomeProc使用OneDB.dbo.SomeTable然后只OneDB.WebGUI.SomeProc需要权限。不检查对具有相同所有者的引用对象的权限。

注意:我没有深入研究跨数据库所有权链接。我只知道普通的老“所有权链”以及

现在,根据评论,您确实有 2 个可以组合的数据库。不是最初暗示的 3。然而,中间体和网可以结合。

其他“私有”数据库也许可以合并,但这将是一个单独的问题。有关“一个数据库或多个”的更全面讨论,请参阅底部链接

解决方案?

如果额外的数据库只是代码容器,那么模式是一个更好的主意。

这听起来像是您在应该使用“架构”的地方使用了“数据库”(在 SQL Server 意义上,而不是在 MySQL 意义上)。我有一个 WebGUI 架构、一个 Helper 或 Common 架构(用于替换中间数据库)和桌面架构。这样您就可以根据客户端分离权限,并且只有一个数据库

使用一个数据库(除了“所有权链”之外),您还可以开始考虑索引视图、SCHEMABINDING(我总是使用它)以及单独的数据库无法做到的

有关架构的更多信息,请参阅以下问题:

最后,似乎没有理由基于“不需要事务完整性”而拥有单独的数据库。请参阅此问题以解释这一点: 有关何时使用非 dbo 架构与新数据库的决策标准