>包含桌面软件使用的私有数据的多个生产数据库
>公共网站的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