SQL Server 架构所有权

Pau*_*aul 3 sql-server-2008

我目前正在学习 SQL Server 2008 并且遇到了模式,我不明白他们必须有一个所有者的一件事;为什么他们不能拥有自己?

我的背景主要是 Java,听起来架构就像一个没有所有者的包。

Seb*_*ine 6

SQL Server 中的每个对象都必须由某人拥有。所有权用于控制权限。例如,您拥有的任何对象都可以直接访问,而无需授予您。另一个示例是可以访问同一所有者拥有的任何对象的过程。这允许只能访问该过程的人执行它,即使它正在访问其他人拥有的对象。

模式是大多数其他 RDBMS 没有的分组机制。(如果其他 RDBMS 指的是“模式”,它的意思更像是我们所说的“数据库”。)模式允许将不同类型的对象组合到单个数据库中的逻辑单元中。默认情况下,架构的所有权直接传递给该架构中的所有对象。如果更改架构的所有者,则其中所有对象的所有者也会更改。(但是,这可以逐个对象地更改。)

另一方面,您可以授予对架构的访问权限,从而授予对其中所有对象的访问权限。这使得管理权限变得更加简单。

请注意,您应该始终使用 schemaname.objectname 完全限定每个对象。这样做的原因有两个:

  1. 性能:SQL Server 尝试根据不同的设置和规则找出在没有架构规范的情况下引用的对象的架构。这会不必要地消耗宝贵的 CPU 周期。
  2. 虽然很少见,但它可能会导致安全和其他访问问题,因为如果不同架构中存在多个同名对象,SQL Server 可能会选择错误的对象。