微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

数据库设计 – 通过第三个数据库使用相同的登录连接两个数据库更安全吗?

我们有以下设置:

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

目前,网站登录到Web数据库,Web数据库连接到中间数据库以在生产数据库提取数据或执行存储过程.所有数据库都在同一个sql实例上,整个过程使用相同的用户帐户.

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

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

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

解决方法

有一件事跳出来:

The entire process uses the same set of login credentials

问题

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

但是,你失去了这样的所有权链接.

假设WebDB.dbo.someProc调用PrivateDB.dbo.soMetable. UserX需要两个对象的权限.如果这是使用OneDB.dbo.soMetable的OneDB.WebGUI.someProc,那么只有OneDB.WebGUI.someProc需要权限.不检查具有相同所有者的引用对象的权限.

注意:我对cross database ownership chaining没有太深入了解.我只知道普通的旧“ownership chaining”

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

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

解?

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

这听起来像你使用“数据库”,你应该使用“架构”(在sql Server意义上,而不是MysqL意义上).我有一个WebGUI架构,一个Helper或Common架构(用于替换Intermediate数据库)和Desktop架构.这样,您可以根据客户端分离权限,只需拥有一个数据库

使用一个数据库(除了“所有权链接”),您还可以开始考虑索引视图,SCHEMABINDING(我总是使用它),这样就无法通过单独的数据库来完成

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

> Schema design – best practices?
> Over use/correct use of schemas?

最后,似乎没有理由根据“不需要事务完整性”建立单独的数据库.看到这个问题来解释一下:
Decision criteria on when to use a non-dbo schema vs a new Database

原文地址:https://www.jb51.cc/mssql/79374.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐