Stu*_*ler 10 sql-server best-practices
在Stackoverflow上问了这个问题后,我想知道我所做的是正确/最佳实践的地方。
基本上,我创建的每个对象都进入一个模式,模式名称反映了用法。例如,我有模式Audit
和Admin
(除其他外)。
这反过来在 中没有留下任何对象dbo
。这个可以吗?还有什么我需要做的吗?
Tho*_*ger 13
模式不仅是一个很好的安全工具(这是使用它们的充分理由),而且它们也非常适合逻辑分离。似乎这就是你正在练习的。
即使当前的要求不需要特殊的安全性,假设所有与审计相关的数据库对象对于数据库角色来说都应该是安全的。如果这些对象分散在整个dbo
架构中,则您必须明确deny
授予对各个对象的权限。但是有了Audit
模式,你做一个单一的deny
就可以了。
我个人练习使用模式。然而,就像数据库中的所有事物一样,有一种快乐的媒介。我不会为数据层的每个粒度方面创建模式。有太多的模式和分离之类的东西。但我猜你离那不远了。
一个典型的模式是基于权限的模式,因此您对代码具有WebGUI
, Desktop
etc ,因此所有对象都具有来自模式的相同权限。
如果您有明确的用户组,那么您可以对此进行许可,但最终会出现重叠和混乱的权限。我倾向于将用户/组检查推迟到一些代码内部检查而不是权限对象:假设您有 Admin 和 HR Excel 用户:这些都运行Desktop
代码。
数据通常是共享的,所以我有一个Data
架构,可能是一个History
或Archive
架构。
有些代码不是公开的(如 UDF 或内部 proc),因此我将使用Helper
不应由客户端代码运行的代码的架构。
最后,模式 like Staging
or System
orMaintenance
有时很有用。
尽管dbo
架构中没有用户对象,但用户dbo
拥有所有架构。