理解SQL SERVER中所有者和架构的区别

 我来答
一骑当后
推荐于2018-03-26 · 知道合伙人数码行家
一骑当后
知道合伙人数码行家
采纳数:40298 获赞数:306435
网络、设备维护、电路、弱电检测。

向TA提问 私信TA
展开全部
  理解SQL SERVER中所有者和架构的区别
  SQL SERVER2005介绍了架构,架构相对于以前版本中的对象所有者。本文将解释这两者的区别,并希望能解开你至今仍对架构一点困惑。

  对象所有者
  要理解所有者和架构之间的区别,让我们先花点时间来复习一下对象的所有权。在SQL SERVER2000或以前版本中创建一个对象,对象必须要有一个所有者(owner)。大部分情况,所有者为“dbo(数据库所有者)”。一个对象可以被数据库中任何一个用户所拥有。判断一个对象的所有者的方法是在企业管理器或Manager Stdio中浏览表的列表时查看对象的全限定名称(full qualified)。比如,一个由dbo所拥有的表orders其全限定名为dbo.orders。如果该表的所有权转移至用户abc,那么该表现在的全限定名为abc.orders。

  对象是如何属于某个所有者的呢?这依赖于创建对象时的用户。 也有可能是db_owner角色成员创建了一个由数据库中任何对象所拥有的对象。缺省情况下,创建对象的用户账号(该账户必须拥有CREATE TABLE的权限)也是对对象的所有者。只有db_owner角色成员可以创建由dbo所拥有的对象。即使那样,在某些情况下,对象的所有者还可能是实际的用户而不是dbo。

  使用dbo作为数据库中所有对象的所有者可以简化对象的管理。因为数据库中永远都会有dbo用户的。数据库中的用户只要有权限可以不用指定所有者名称就可以存取由dbo拥有的对象了。如果一个对象不是被dbo所有用,那么该所有者将要被删除时,必须将对象的所有权转移给其他用户。比如有一个非dbo用户ted创建了sales表,该表名称为ted.sales。如果ted以外的用户想使用此表,那么必须使用表的全限定名来指定。如果ted离开了公司或部门,那么他的数据库用户账号必须得删除。在删除前,ted所拥有的对象必须使用存储过程sp_changeobjectowner将所有权转移至其他用户账号。

  如果这个表在应用程序或者其他存储过程中使用过,改变表的所有者可能导致所有的代码出错。如果一开始该表就被dbo所拥有,那么即使删除了ted账号也没有关系。代码也不需要使用全限定名——这样可能损失点性能——来指定对象,这被认为是最实用的方法。

  架构
  我喜欢将架构想象成一个组织对象的容器。如果你看一下adventureworks样例数据库,你会发现表是按照部门或者功能组织起来的,比如“HumanResources”或者“Production”(图一)。这看起来有点像老的拥有者概念,但却拥有许多益处。首先,因为对象不再绑定到用户账号上,所以你根本不用担心当一个账号被删除时需要变换对象的拥有者。另一个好处是使用架构可以简化表和其他的对象的权限管理。每个架构都有其所有者,但是所有者和架构名是不绑定的。所有当一个用户拥有一个架构,并且这个用户必须从数据库中删除时,可以不用破坏任何代码而仅仅是将架构的所有者变一下。如果你不希望用架构来组织数据库中的对象,只用dbo架构就行了。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式