【数据库学习笔记】什么是DBO?

  刚开始使用SQL server,对DBO不是很理解。在网络上搜寻了一些他人的理解,现摘抄如下。

 来源网址:

  http://bbs.csdn.net/topics/200051355

  http://bbs.csdn.net/topics/100179549

  我也上百度找了一下,有两个命案比较像。

1. dbo是一个构架(schema),在sql2005中,表的调用格式如下:"数据库名.构架名.表名",同一个用户可以被授权访问多个构架,也可以被禁止访问某个或多个构架,这就是2005中提倡的"用户与构架分离"的概念. 在2005中,如果在创建表时没有指定构架(schema),那么系统默认该表的构架是dbo,所以会出现很多表名前自动加上dbo.字符样式. 
2.DBO是每个数据库的默认用户,具有所有者权限,即DbOwner 


这两答案,看上去感觉是大致一样,却明显有差别,真是头痛,希望对SQL有多年了解的前辈们给解释或下一个定论,到底是“构架”还是“默认用户”?

---------------------------------------------------------------------------------------------------------------------------

dbo是默认用户也是架构,
dbo作为架构是为了更好的与2000兼容,
在2000中DataBaseName.dbo.TableName解释为:数据库名.用户名.表名,
在2005中DataBaseName.dbo.TableName解释为:数据库名.架构名.表名,
这样2000中的代码移植到2005中就不会报错(dbo在2005中是默认的架构,创建表时,如不指定架构,则默认为属于dbo为个架构)。

----------------------------------------------------------------------------------------------------------------------------------

虽然 SQL Server 2000 包含 CREATE SCHEMA 语句,但实际上并不会像上面所定义的那样创建架构。在 SQL Server 2000 中,数据库用户和架构是隐式连接在一起的。每个数据库用户都是与该用户同名的架构的所有者。对象的所有者在功能上与包含它的架构所有者相同。因而,SQL Server 2000 中的完全限定名称的“架构”也是数据库中的用户。

在 SQL Server 2005 中,架构独立于创建它们的数据库用户而存在。可以在不更改架构名称的情况下转让架构的所有权。并且可以在架构中创建具有用户友好名称的对象,明确指示对象的功能。

SQL Server 2005 还引入了“默认架构”的概念,用于解析未使用其完全限定名称引用的对象的名称。在 SQL Server 2000 中,首先检查的是调用数据库用户所拥有的架构,然后是 DBO 拥有的架构。在 SQL Server 2005 中,每个用户都有一个默认架构,用于指定服务器在解析对象的名称时将要搜索的第一个架构。可以使用 CREATE USER 和 ALTER USER 的 DEFAULT_SCHEMA 选项设置和更改默认架构。如果未定义 DEFAULT_SCHEMA,则数据库用户将把 DBO 作为其默认架构。

-----------------------------------------------------------------------------------------------------------------------------------